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

时间:2017-07-23 17:15:11

标签: javascript node.js express callback request

我正在使用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的回调函数?

1 个答案:

答案 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);
    });  
  });
}