Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Express 4将数组从Nodejs中的app.js传递到routes/index.js_Javascript_Node.js_Express - Fatal编程技术网

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

Javascript 使用Express 4将数组从Nodejs中的app.js传递到routes/index.js,javascript,node.js,express,Javascript,Node.js,Express,如何将对象数组传递给routes中间件,以便根据传递的变量渲染视图 目前,这是我正在使用的布局 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, re

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

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

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;
翡翠索引

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

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

有多种方法可以解决这一问题,但是如果您希望将阵列“烘焙”到中间件中(正如代码示例所建议的),您可以这样做:

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

这可能对您有用,也可能不有用,取决于您的需要。

谢谢您的回答-这正是我需要的,但是当我尝试使用
app.use(“/”,index)实现它时,这正是我需要的
我被抛出了一个
'路由器。use()需要中间件函数,但得到了一个'+gettype(fn)
--我如何将此实现用于app.use抱歉,我忘记了一个
return
语句;它已经更新了,现在应该可以工作了。好的,干杯,这似乎和预期的一样。我现在遇到的问题是,每次调用导出的函数时都会创建新的中间件。如何使用
app。使用
定义的路由和不断变化的数组?我有一个循环,它每10秒更新一个数组,我希望中间件用它更新,但是在更新数组的同一个循环中重新定义索引,比如
loop{array1.push(1);index=require('./routes/index')(array1);}
不起作用(嗨,威廉,它对我有用。我用这个程序试用了一下:好的,谢谢你的帮助Ethan。我写了一个类似的调试应用程序,它工作了,一定是我的应用程序的结构有问题。干杯