Проблема / решение
helper.js
выполняет асинхронный HTTP-запрос.Следовательно, return data
выполняется после того, как возвращен поиск функции.
Вы хотите использовать функцию обратного вызова вместо return
.
Возможно, вы захотите прочитатьнемного документации о том, как работать с асинхронным программированием в node.js, вот справочная статья .
Исправленный код
Обновленный код будет выглядеть следующим образом:
helper.js
exports.lookup = function(id, callback){
var xml = '<?xml version="1.0" encoding="ISO-8859-1"?> \
<data>\
<key>aSecretKey</key>\
<request>read</request>\
<id>'+id+'</id> \
</data>';
var options = {
url:'https://somesite.com',
headers: {'Content-Type': 'application/xml'},
body:xml
};
request.post(options, function (e, r, body){
var data = JSON.parse(parser.toJson(body)).result;
callback(null, data);
});
};
app.js
app.post('/customer', (req, res) => {
flg.lookup(req.body.id, function(err, res) {
// this callback function is called by lookup function with the result
if (err)
throw err
console.log('result is', res);
res.render('index', {customerEmail:'test5@test5.com'});
});
});
Альтернативные решения
Вы также можете решить проблему ysing Promises
или async / await
,Я позволю вам посмотреть их в вашей любимой поисковой системе.