如何将对象数组传递给路径中间件,以便根据传递的变量渲染视图。
目前,这是我正在使用的布局
app.js
var index = require('./routes/index');
ARRAY = [objects];
app.use('/', index);
路由/ index.js
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next){
res.render('index', {data: ARRAY});
});
module.exports = router;
index.jade
extends layout
block content
each d in data
div!= d.method()
目前,我能够生成的唯一可行的解决方案是使用全局变量,但这不是可持续的或可扩展的。 我尝试了 app.set('shrinkr',shrinkr); 和 app.locals ,但无法使用我的应用程序的布局。根据我对Express4框架的理解,我应该可以在app.js中执行类似的操作:
var index = require('./routes/index')(array);
但我无法正确实施,并且网上没有关于此的信息。
答案 0 :(得分:2)
有多种方法可以解决这个问题,但如果你想要"烘烤"将数组放入中间件(如您的代码示例所示),您可以这样做:
var express = require('express');
module.exports = function(array) {
var router = express.Router();
return router.get('/', function(req, res, next){
res.render('index', {data: array});
});
}
然后你可以按照你的建议使用它:
var index = require('./routes/index')(array);
因为每次调用导出的函数时都会创建新的中间件,所以可以将独立的数组烘焙到不同的中间件中:
var index1 = require('./routes/index')(["array 1"]);
var index2 = require('./routes/index')(["array 2"]);
根据您的需要,这可能对您有用,也可能没用。