【问题标题】:Node.js - accessing a const from a function within http.getNode.js - 从 http.get 中的函数访问 const
【发布时间】:2021-02-05 07:42:24
【问题描述】:

在下面的代码中,我正在访问以英镑为单位的当前比特币价值。 console.log 工作正常。

value.js

http = require('http');

http.get({
    host: 'api.coindesk.com',
    path: '/v1/bpi/currentprice.json'
    },
    function get_value(response) {
        // Continuously update stream with data
        var body = '';
        response.on('data', function(d) { body += d; });
        response.on('end', function() {
                 // Data reception is done, do whatever with it!
                var parsed = JSON.parse(body);
                var final_value = parsed.bpi.GBP.rate
                console.log(final_value)
                module.exports = final_value;
            });
    }
);

但是当我尝试从另一个文件访问这个值(final_value)时:

server.js

PORT = 4000;
var http = require('http');
const value = require('./value.js');

var server = http.createServer((req, res) => {
    res.write("Create server working");
});

server.listen(PORT, () => {
    console.log(value);
});

我得到的只是 {}。

我对 node.js 很陌生,更习惯于 python。我研究过从函数中的函数访问值,但找不到任何解决方案。

有没有人建议我如何从单独的文件中访问变量 final_value?

【问题讨论】:

  • 它看起来像一个异步问题。当你导入 value.js 模块时,还没有导出,因为对 api 的请求还没有完成。您可以在 value.js 中导出一个方法以在外部使用它来获取 final_value。

标签: javascript node.js function api require


【解决方案1】:

老实说,比起原生 Node,我更喜欢使用 express,但鉴于你正在使用它,我可以给你一些提示来帮助你:

如果您想使用其他人的 js 文件,您应该导出您想要在他们之间共享的内容。在您展示的示例中,它应该是这样的(请注意,我正在导出函数并将其用作函数中的 Promise):

const http = require('http');

module.export = function () {
    return new Promise(function (resolve) {
        http.get({
                host: 'api.coindesk.com',
                path: '/v1/bpi/currentprice.json'
            },
            function get_value(response) {
                // Continuously update stream with data
                var body = '';
                response.on('data', function(d) { body += d; });
                response.on('end', function() {
                    // Data reception is done, do whatever with it!
                    var parsed = JSON.parse(body);
                    var final_value = parsed.bpi.GBP.rate
                    console.log(final_value)
                    resolve(final_value);
                });
            }
        );
    });
}

那么你可以通过这种方式在你的服务器文件中使用它:

...
server.listen(PORT, () => {
    value.then(result => console.log(result));
});

【讨论】:

    【解决方案2】:

    你可以把module.exports = final_value改成exports.final_value = final_value,然后用

    const { final_value } = require('./value.js');
    
    ...
    
    server.listen(PORT, () => {
        console.log(final_value);
    });
    
    

    这样做的好处是您现在可以从value.js 文件中导出其他值,并以相同的方式要求它们。 module.exportsexports.value 之间的主要区别在于module.exports 是具有exports 作为属性的对象,而exports 只是module.exports 的别名。本质上,通过使用module.exports 语法,您将分配给module.exports 的对象的值将分配给它。

    【讨论】:

      猜你喜欢
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 2021-12-12
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      相关资源
      最近更新 更多