使用nodejs中的导出返回值

时间:2017-02-20 18:59:27

标签: javascript node.js

我已经在模块化我的代码上做了一些阅读,并决定将一些函数导出到一个单独的文件中,并在调用后将它们包含在我的主函数中。

所以我有两个文件,body { background-color: white; } .container{ width: 1200px; height: 800px; backround-color: #FAEBD7; } #header{ height: 50px; background-color: darkblue; } #title{ text-align: center; color: white; font-size: 30px; padding-top: 5px; } #leftside{ width: 300px; float: left; height: 550px; border: 1px solid darkblue; padding-top: 20px; padding-left: 5px; padding-right: 5px; margin-top: 50px; } #info{ color: darkred; } #info2{ color: darkred; } #showTable { width: 500px; float: left; margin-top: 50px; margin-left: 100px; } index.js

在我的weather.js文件中,我有:

"使用严格&#34 ;;

weather.js

然后在我的exports.sometest = sometest; function sometest() { request('http://api.openweathermap.org/data/2.5/weather?&appid=' + process.env.weather_api_key + '', (error, response, body) => { return body; }); } 文件中,我将其index.js包括在内。

那么如何在我创建的函数中使用我返回的数据呢?并且有人可以向我解释它是如何工作的,我在范围和语法等方面有点困惑

谢谢。

2 个答案:

答案 0 :(得分:0)

我认为您没有正确导出模块,并在那里添加了一些额外的问题。

您在weather.js中导出模块的方式是:

module.exports = function sometest() {
    request('http://api.openweathermap.org/data/2.5/weather?&appid=' + process.env.weather_api_key + '', (error, response, body) => {
      return body;
    });
}

你在index.js中包含它的方式还可以。

你必须记住天气正在返回一个函数,所以你需要执行它。但除此之外,您正在执行异步操作,并且在那里您提供了一个回调,以便在响应可用时调用。 所以,我会这样做: index.js

const testing = require("../../../lib/weather")(callback) // callback is a function that will be executed when request in weather is done;

weather.js

module.exports = function(callback) {
        request('http://api.openweathermap.org/data/2.5/weather?&appid=' + process.env.weather_api_key + '', (error, response, body) => {
          callback(body);
        });
    }

那么,这里发生了什么。在weather.js中,您将返回一个函数。该函数执行异步请求,并在请求完成时执行index.js提供的回调 在index.js中,您需要该文件,并添加额外的括号来执行weather返回的函数,除了执行异步请求响应时提供的回调。

答案 1 :(得分:0)

我将首先详细介绍,然后我们将努力回答您的问题。 它完全与CommonJS标准有关。使用模块时,CommonJS标准指定以下三个组件:

  1. require():此方法用于将模块加载到代码中。
  2. exports:此对象包含在每个模块中,并允许在使用require()加载模块时公开代码的某些功能。
  3. module.exports:使用require()加载完整模块。
  4. 到目前为止,您应该已经收集到我们总是需要该模块,如果我们使用方法2(暴露某些功能),这就是它的样子:

    //weather.js is the name of the file
    exports.sometest = function() {
        request('http://api.openweathermap.org/data/2.5/weather?&appid=' + process.env.weather_api_key + '', (error, response, body) => {
        return body;
    };
    

    然后在你的索引文件中我们将像这样访问这个函数:

    const testing = require('../../../lib/weather.js');
    // access the method from the 'testing' object
    testing.sometest;
    

    如果要公开完整模块:

    // weather.js
    module.exports = function sometest() {
         request('http://api.openweathermap.org/data/2.5/weather?&appid=' + process.env.weather_api_key + '', (error, response, body) => {
         return body;
         });
    };
    

    在index.js中,它看起来像这样:

    const testing = require("../../../lib/weather");
    weatherTest = testing();
    

    希望这有帮助。