Javascript 通过引用将对象传递给节点模块
我似乎无法通过引用将对象传递给节点模块。例如,在我的main server.js中,我有: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';
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
对象。