Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过引用将对象传递给节点模块_Javascript_Node.js - Fatal编程技术网

Javascript 通过引用将对象传递给节点模块

Javascript 通过引用将对象传递给节点模块,javascript,node.js,Javascript,Node.js,我似乎无法通过引用将对象传递给节点模块。例如,在我的main server.js中,我有: var test = {}; var ctrlFiles = require('./app/controllers/files')(test); 在server.js中,我截获了一个HTTP请求,并更改了测试对象: app.use(function(req, res){ console.log('2. updating test'); test.name = 'some value';

我似乎无法通过引用将对象传递给节点模块。例如,在我的main server.js中,我有:

var test = {};
var ctrlFiles = require('./app/controllers/files')(test);
在server.js中,我截获了一个HTTP请求,并更改了测试对象:

app.use(function(req, res){
    console.log('2. updating test');
    test.name = 'some value';
    next();
});
在server.js中,我定义了路由并将请求传递给我的文件控制器:

app.get('/files', function(req, res) {
    console.log('3. in files route, test is ', test);
    ctrlFiles.getUserFiles(req, res);
});
文件控制器是:

module.exports = function(testReference) {

    var test = testReference;

    console.log('1. test is ', test);

    return {

        getUserFiles: function(req, res) {

            console.log('4. in getUserFiles and test is ', test);

        }
    };
}
日志如下所示:

1. test is  {}
2. updating test
3. in files route, test is  { cookie: 
   { name: 'some value' }
4. in getUserFiles and test is  {}

当我对“/文件”执行GET请求时,
test
始终为空。如何通过引用通过
测试
,这样当它在我的文件控制器之外更新时,它也在控制器内更新?

您确定第一个
.use()
回调确实被调用了吗?引用通过并不是指您认为它的意思。JavaScript严格按值传递。但是,对象表示为引用。在您的示例中,您肯定会在任何地方传递相同的对象。它将检查中间件部分是否按正确的顺序实际执行。@Pointy是的,我确定,我会更新question@FelixKling是的,中间件已执行,将从您的问题中更新部分,请勿执行此操作。您在多个请求之间共享一个变量,这意味着您最终会遇到竞争条件。如果其中一个中间件是异步的,则一个请求可以读取另一个请求设置的值。将该值附加到
req
对象。