使用Express 4将数组传递给Nodejs中app.js的routes / index.js

时间:2016-05-02 03:56:02

标签: javascript node.js express

如何将对象数组传递给路径中间件,以便根据传递的变量渲染视图。

目前,这是我正在使用的布局

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);

但我无法正确实施,并且网上没有关于此的信息。

1 个答案:

答案 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"]);

根据您的需要,这可能对您有用,也可能没用。