【问题标题】:node.js returning contents of a file using request modulenode.js 使用请求模块返回文件的内容
【发布时间】:2018-08-02 00:16:33
【问题描述】:

我正在学习如何在 Node.js 中读取 json 数据(对于 walkscore.com api),我找到了请求模块。我知道如何让它在“请求”块中执行一个动作。但是,我在一个函数中调用它,我希望该函数返回 json 数据。我如何能够简单地访问函数内部的“body”变量,但在请求块之外?

var request = require("request")

function loadWalkScore(lat, lon, address, name, state) {
   var address = encodeURI(address)
   var url = "http://api.walkscore.com/score?format=json&address=" + address
   url += "&lat=" + lat + "&lon=" + lon + "&wsapikey=" + wsapikey

   request(url, { json: true }, (err, res, body) => {
      if (err) { return console.log(err); }
      // somehow make loadWalkScore() function return <body>
   });
}

【问题讨论】:

    标签: json node.js request


    【解决方案1】:

    您可能希望loadWalkScore 接受一个回调参数,并在您的请求回调中调用它。在编写 Node 代码时,您的函数实际上很少返回您请求的数据,它们要么接受(并最终调用)您提供的回调,要么返回 Promises(最终使用请求的数据解析)。这是处理异步操作(如 HTTP 请求)的方法。

    可能是这样的:

    function loadWalkScore(lat, lon, address, name, state, cb) {
        ....
        request(url, { json: true }, (err, res, body) => {
            if (err) {
                console.log(err);
                cb(err);
            } else {
                cb(null, body);
            }
       });
    

    然后这样称呼它:

    loadWalkScore(...args..., function (err, body) {
        console.log('body:', body);
    })
    

    【讨论】:

    • 我的荣幸!欢迎来到 Stack Overflow。如果您觉得我的回答有帮助,请单击我的回答旁边的绿色复选标记。如果有人提供更好的答案,您可以随时更改它。
    猜你喜欢
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多