我需要将从上一个函数创建的一些数组传递给下一个函数,以便将它们发送到客户端。现在我使用公共变量来实现我的目标,但我知道这不是一个好的做法,可能有更好的方法来做我正在寻找的事情。这是我的代码:
var myArray; // public array
app.use('/users', findUsers, someOtherFunctions, function(req, res){
res.send('users.ejs', {
array: myArray,
(etc...)
})})
function findUsers(req, res, next){
db.find({}, function(err, array){
if(err) throw err;
if(array.length > 0){
myArray = array
}
})
next();
}
有没有另一种方法可以在不创建公共变量的情况下做到这一点?谢谢!
如果myArray
应该包含特定于此特定请求的内容(并且看起来确实如此),则可能需要使用 res.locals
,有关详细信息,请参阅参考:http://expressjs.com/en/api.html#res.locals。
更新:
因此,使用res.locals
您的示例将如下所示:
app.use('/users', findUsers, someOtherFunctions, function(req, res) {
res.send('users.ejs', {
array: res.locals.myArray,
(etc...)
});
});
function findUsers(req, res, next) {
db.find({}, function(err, array) {
if (err) throw err;
if (array.length > 0) {
res.locals.myArray = array
}
next();
});
}