使用Express4将数组从Nodejs中的app.js传递到routes/index.js

Pass array to routes/index.js from app.js in Nodejs with Express 4

本文关键字:js routes index app Express4 数组 中的 Nodejs 使用      更新时间:2023-09-26

如何将对象数组传递到路由中间件,以便根据传递的变量呈现视图。

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

app.js

var index = require('./routes/index');
ARRAY = [objects];
app.use('/', index);

routes/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()

目前,我能产生的唯一有效的解决方案是使用全局变量,但这是不可持续或不可扩展的。我试过应用程序集("shrinker",shrinkr)应用程序。locals,但无法将它们中的任何一个用于我的应用程序的布局。根据我对Express4框架的理解,我应该能够在app.js:中做这样的事情

var index = require('./routes/index')(array);

但是我无法得到正确的实现,而且网上也没有关于这方面的信息。

有多种方法可以解决这个问题,但如果您想将数组"烘焙"到中间件中(正如您的代码示例所建议的那样),您可以这样做:

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

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