我有一个快速应用程序,在这里我只是从另一个远程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;
一切正常。
现在,我想在名为
router
的函数中的getData
方法之外进行远程API调用。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
方法没有返回我可以解决的Promise。 最佳答案
解决此问题的一种方法是自己创建Promise:
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
为函数,可以在每次调用它时重新获取数据。关于javascript - 在Express应用中返回远程API数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55597477/