Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript API请求返回正确,但在回调函数中为null_Javascript_Node.js_Express_Callback_Request - Fatal编程技术网

Javascript API请求返回正确,但在回调函数中为null

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

我正在使用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=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);
    });  
  });
}