我正在使用npm Express和Request模块通过API获取电影信息:
var express = require("express");
var app = express();
var request = require("request");
app.get("/results", function(req, res){
console.log(getBody("http://www.omdbapi.com/?s=The+Shining&page=1&apikey=myKey"));
});
function getBody(requestString){
request(requestString, function(error, response, body){
return body;
};
}
为了便于阅读,我在此处删除了对请求的错误检查。
在请求中,记录“body”表明请求确实返回了正确的JSON。但是,当我返回到app.get时,日志记录的值是未定义的。
是否无法将此值返回给app.get的回调函数?
答案 0 :(得分:1)
request
是一个异步函数,因此您需要使用众多技术之一(回调,承诺等)来成功返回数据。
以下是回调示例:
app.get("/results", function(req, res) {
getBody(endpoint, function (data) {
console.log(data);
});
});
function getBody(endpoint, callback) {
request(endpoint, function(error, response, body) {
callback(body);
});
}
使用承诺的例子:
app.get("/results", function(req, res) {
getBody(endpoint).then(function (data) {
console.log(data);
});
});
function getBody(endpoint, callback) {
return new Promise(function (resolve, reject) {
request(endpoint, function(error, response, body) {
if (error) reject('Request failed');
resolve(body);
});
});
}