2015-12-09 9 views
1

Это может быть глупый вопрос, но я совершенно новичок в Node/REST и не нашел ответа.Звоните REST Api из REST Api (Node.js)

Скажите, что есть запрос A, который запрашивает объект A ('../student/:studentId'). И есть еще один запрос B, который запрашивает объект B ('.../lecture /: lectureid'). Теперь объект B будет содержать некоторую информацию о лекции, а также учащиеся, посещающие лекцию.

Теперь я могу думать о трех possbile способов сборки объекта B:

1 .: Запрос вызова в несколько раз внутри обработки Resquest B

2 .: Скопируйте и вставьте код из обработка запроса

3 .: Создайте объект, который получает доступ к базе данных и прикрепить его на все запросы запроса:

var dbAccessObject = require('./dbAccess'); 

    app.use(function (req,res,next){ 
     req.dbAccessObject = dbAccessObject; 
     next(); 
    )}; 

Какой вариант будет твой выбор? Или есть другой, лучший способ?

+1

3-й, потому что вызов собственного сервера с вашего собственного сервера не так эффективен. –

ответ

2

Вам не нужно направить запросы на себя. Вы можете справиться с этим в своем собственном коде, структурируя его красиво. Допустим, у вас есть два API маршрутов:

/a: runA(); 
/b: runB(); 

А вы хотели бы/с, чтобы вернуть результат как/а и/б, как если бы были сделаны два вызова. Если вы нарушили вашу логику до runA() и runB(), как указано выше, то/с становится runC():

return { 
    a: runA(), 
    b: runB() 
} 

Это просто при написании синхронную кода, но асинхронный код немного сложнее, потому что runB() может вернуться до runA(); вам нужно знать, когда они оба закончены. Я рекомендую использовать библиотеку async для этого как быструю победу: http://www.informit.com/articles/article.aspx?p=2265406&seqNum=2

+0

И реализация должна быть такой, как в варианте 3? Или существуют другие способы сделать методы доступными в разных файлах? Ах, и спасибо за дополнительную информацию об async lib – AljoSt

+0

Да. «Копировать и вставлять код» редко бывает хорошей идеей. Сегодня я использовал пример использования async: https://tonicdev.com/jadaradix/async –