我正在使用 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 的回调函数?
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);
});
});
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句