Как сделать вызовы API REST для API, которые у меня есть на моем бэкэнде - PullRequest
0 голосов
/ 21 марта 2019

Вот то, чего я пытаюсь достичь.Я хочу использовать операцию READ из разработанного мною CRUD, а это значит, что мне нужно вызвать HTTP-запрос (например, с помощью RequestJS).А затем используйте ответ, полученный от READ, для выполнения некоторых других операций.

Операция READ

router.get('/api/example', function(request, response, next) {
   //MongoDB Code to fetch a certain doc
   exampleModel.find(request.query.key)
   .then(function(doc) {response.status(200).json(doc)})
});

Итак, как вы видите, я отвечаю пользователю с помощью json.Я хочу использовать этот маршрут и получить ответ JSON для использования в другой функции.Промежуточное ПО в некотором смысле.

Другая функция

function useRead(){
    //Make an HTTP Request using localhost:3000/api/example?key=123
    useJSON(doc)
}

Я понимаю, что мог бы использовать requestJS для получения ответа.Но проблема в том, имеет ли смысл делать запрос к localhost: 3000 / api / example? Key = 123.а также, когда я разверну приложение на Heroku, например, этот URL не будет иметь смысла, и я думаю, что это приведет к сбою приложения, так как оно должно использовать www.myDomain.com вместо localhost: 3000, так как мне решить эту проблему.

Я старался быть кратким, насколько это возможно, извините, если что-то не ясно.

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Возможно, у вас уже есть решение под рукой.Предполагая, что вы разрабатываете с использованием инфраструктуры MV, такой как response или angular, или просто с простым javascript, вы можете вызывать API с относительным маршрутом, если вы визуализируете интерфейсную часть, используя express static внутри того же самого express-приложения.

router.get('/api/example', function(req, res){
    exampleFunction(req.query, function(err, doc){
        if(err)
            console.log(err);
        response.status(200).json(doc);
    })
});

Таким образом, внутри веб-приложения вы можете вызывать API, как показано ниже.

app.js (или любой другой файл, в котором запускается приложение)

app.use('/', express.static(__dirname + 'public')); // assuming static files are placed inside public folder
async function getAPI() {
   try {
     const res = await axios.post('/path/to/api'); // Doesn't require server remote url as it is relative
   } catch (e) {
     console.log(e);
   }
}

Теперь внешний интерфейс может вызывать свои собственные API-интерфейсы следующим образом.

Дополнительный совет (Использование вызова обещания внутри маршрута)

...
const axios = require('axios'); // I am using axios. Use whatever you require
...
...
route.get('/path/to/api', (req, res) => {
  try {
    const res = await axios.get('/remote/api/);
    res.send(res.data)
  } catch (err) {
    res.status(401).send(err.data);
  }
});
0 голосов
/ 22 марта 2019

Разработка комментария Гонсало , пожалуйста, переместите логику внутри маршрута API в функцию, экспортируйте функцию для использования в любом месте на сервере.

Пример:

//Page with read operation

module.exports = {
    router : router,
    exampleFunction : exampleFunction
}

router.get('/api/example', function(req, res){
    exampleFunction(req.query, function(err, doc){
        if(err)
            console.log(err);
        response.status(200).json(doc);
    })
});

function exampleFunction(query, next) {
   //MongoDB Code to fetch a certain doc
   exampleModel.find(query.key)
   .then(function(err,doc) {
       if(err)
           return next(err,null);
       return next(null, doc);
   })
}



//page with read call

var readPage = require('readPage');


function useRead(){
    readPage.exampleFunction({query:{key:'abcd'}},function(err, doc){
        if(err)
             console.log(err);
        useJSON(doc)
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...