Javascript API请求返回正确,但在回调函数中为null
我正在使用npm Express和请求模块通过API获取电影信息:Javascript API请求返回正确,但在回调函数中为null,javascript,node.js,express,callback,request,Javascript,Node.js,Express,Callback,Request,我正在使用npm Express和请求模块通过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=m
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;
};
}
为了可读性,我在这里删除了对请求的错误检查
在请求中,日志主体显示请求确实返回了正确的JSON。但是,当我返回app.get时,日志记录的值未定义
无法将此值返回到app.get的回调函数吗?请求是一个异步函数,因此需要使用回调、承诺等多种技术之一才能成功返回数据
下面是一个回调示例:
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);
});
});
}