如何在node js中包含文件并在其中执行功能

时间:2018-07-23 07:24:35

标签: javascript node.js

我有两个文件,我想在文件2中包含所有必须在脚本加载时执行的功能,我尝试了模块导出,但是在文件2执行时,它不会更新文件1中的变量“ kList”

我将在文件2中包含所有函数,这将更新文件1中的变量

文件1:-

var kList=[];
var exlist=require("./file2.js");
exlist.lister()

setInterval(function(){
console.log(kList);},3000)

文件2:-

var request= require('requests');
function lister(){
request.get("www.example.com",function(err,response,body){
body.forEach(body=>{
kList.push(body.item)
});
});
}
module.exports.lister=lister;

3 个答案:

答案 0 :(得分:1)

一个模块中的代码无法访问另一模块中的变量。

要使您的lister函数能够访问分配给klist的数组,您需要将其作为参数传递。

exlist.lister(klist);

function lister(klist) {

答案 1 :(得分:0)

在NodeJS中,您无法从其他模块访问变量。

如果需要设置值,则应以返回或获取您需要更改的变量的方式编写模块。

例如,您可以重写模块2以接受变量:

module.exports = function (kList) {
    request("www.example.com",function(err,response,body){
        body.forEach(body=>{
            kList.push(body.item)
        })
    })
}

在模块1中:

const module2 = require('./module2');

var kList = [];
moduel2(kList);

更好的方法是让 module2 返回值,因为它是一个异步函数,您应该从 module1 传递 callback 函数

// module 2
module.exports = function (callback) {
    request(url, callback);
}

您还可以预处理数据并仅传递结果:

module.exports = function (callback) {
    request(url, function () {
        var data = [];
        body.forEach(/* process the data*/);
        callback(data);
    });
}

一种更简洁的方法是承诺该模块:

// module 2
module.exports = function () {
    return new Promise(function (resolve, reject) {
        request(url, function (err,response,body) {
            if (err) {
                reject(err);
                return;
            }

            resolve(body.item);
        });
    });
}

因此,在您的 module1 中,您可以得到承诺的结果:

// module 1
var kList=[];

const module2 = require('./module2');

module2().then(items => (kList = items.reduce(/* ... */))
         .catch(error => (/* handle the error here*/));

这是一个承诺,您可以根据需要在 module2 module1 中随意链接任意数量的图层,只记得从返回一些内容then()

答案 2 :(得分:0)

我认为您没有在参数中传递kList

File1:
var kList = [];
var exlist = require('./file2');
exlist.lister(kList)
setInterval(function () {
console.log(kList);
}, 3000)

File2:
function lister(kList) {
body = [1,2,3,4]
body.forEach(item => {
    kList.push(item)
});
}
module.exports.lister = lister;