Возврат данных удаленного API в приложении Express - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть экспресс-приложение, в котором я просто возвращаю данные из другого удаленного API.Ниже приведен фрагмент файла.Я не могу использовать обычный node-fetch или request, так как мой удаленный API использует NTLM-аутентификацию.

const express = require('express');
const router = express.Router();
const httpntlm = require('httpntlm');

const url = 'http://myremoteapi.com/products';

router.get('/', function(req, res, next) {  
  httpntlm.get(
    {
      url,
      username: 'my_user',
      password: 'my_pass
    },
    (err, resp) => {
      if (err) return err;
      res.send(JSON.parse(resp.body));
    }
  );
});

module.exports = router;

Все работает нормально.


Теперь я хотел бы взятьудаленный вызов API вне метода router в функции с именем getData.

const express = require('express');
const router = express.Router();
const httpntlm = require('httpntlm');

const url = 'http://myremoteapi.com/products';

const getData = httpntlm.get(
    {
      url,
      username: 'my_user',
      password: 'my_pass
    },
    (err, resp) => {
      if (err) return err;
      return JSON.parse(resp.body);
    }
  );

router.get('/', function(req, res, next) {
  res.send(getData) // returns undefined
});

module.exports = router;

Я не могу получить тот же результат.Кроме того, я обнаружил, что метод httpntlm не возвращает Обещание, которое я могу разрешить.

1 Ответ

3 голосов
/ 09 апреля 2019

Один из способов решить эту проблему - создать Обещание самостоятельно:

const express = require('express');
const router = express.Router();
const httpntlm = require('httpntlm');

const url = 'http://myremoteapi.com/products';

const getData = () => new Promise((resolve, reject) => {
  httpntlm.get({
      url,
      username: 'my_user',
      password: 'my_pass'
    },
    (err, resp) => {
      if (err) reject(err);
      else resolve(JSON.parse(resp.body));
    }
  );
});

router.get('/', function(req, res, next) {
  getData().then(data => res.send(data));
});

module.exports = router;

Оборачивая httpntlm.get таким образом, что оно становится доступным, и делая getData функцией, данные извлекаются заново всякий раз, когда выпозвони.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...