2016-05-26 6 views
1

У меня есть 2 маршрута test_01 и test_02. Когда запрос приходит к маршруту test_02, Как мне получить доступ к маршруту test_01 и получить его данные ответа?Hapi js, получающий один маршрут от другого

Я не говорю о направлении маршрута от test_02 к test_01

server.route({ 
    method: 'GET', 
    path: '/data/test_01', 
    handler: function (request, reply) { 
     reply('test_01') 
    } 
}) 

server.route({ 
    method: 'GET', 
    path: '/data/test_02', 
    handler: function (request, reply) { 
     // Get data from route '/data/test_01' 
     var test_01_data = '' 
     reply(test_01_data) 
    } 
}) 

Контроллер

Index = function() {} 

Index.prototype = { 

    test_01 : function (req, reply, data) { 
     reply('test_01') 
    }, 

    test_02 : function (req, reply, data) { 
     reply('test_02') 
    } 
} 

module.exports = Index 
+0

написать обработчик в виде отдельной функции и вызвать его там, где требуется, чтобы вы могли бы назвать его в обработчике test2, а также обработчик test1 – avck

ответ

0

имеют отдельную функцию контроллера для вызова из обработчиков

var controllerfn = function(req,reply){ 
    //do stuff 
    return 'test_01'; 
}; 

вызова при необходимости

server.route({ 
    method: 'GET', 
    path: '/data/test_01', 
    handler: function (request, reply) { 
      reply(controllerfn(request,reply); 
    } 
}) 

server.route({ 
    method: 'GET', 
    path: '/data/test_02', 
    handler: function (request, reply) { 
    // Get data from route '/data/test_01' 
    var test_01_data = controllerfn(request,reply); 
    reply(test_01_data) 
    } 
}) 
+0

Hai, Im передают запросы от маршрута к контроллеру. В запросах контроллера обрабатываются и отвечают. Если я попытаюсь вернуться из контроллера, я получу undefined. Я обновил свой вопрос с помощью примера контроллера – sravis

+0

Он работал для вас? на ваших маршрутах вы вызываете функцию контроллера? Отметьте это для аналогичного обсуждения с другим подходом http://stackoverflow.com/questions/33069573/call-a-hapi-route-from-another-route?rq=1 – avck

0

Если вы хотите повторно использовать этот маршрут и не производить другое подключение сокета, вы можете inject к другому маршруту.

server.route({ 
     method: 'GET', 
     path: '/data/test_01', 
     handler: function (request, reply) { 
      reply('test_01') 
     } 
    }) 

    server.route({ 
     method: 'GET', 
     path: '/data/test_02', 
     handler: function (request, reply) { 
      // Get data from route '/data/test_01' 
      request.server.inject({ 
      url: { 
       pathname: '/data/test_01' 
      } 
      }, (res) => { 
      var test_01_data = res.result; 
      return reply(test_01_data); 
      }) 
     } 
    }) 
Смежные вопросы