将JSON传递给Jade,并使用相同的数据进行API访问

我有以下代码作为模式模块:

router.get('/', function(req, res) { Module.find(function (err, modules) { if (!err) { return res.json(modules); } else { res.statusCode = 500; log.error('Internal error(%d): %s', res.statusCode, err.message); return res.json({ error: 'Server error' }); } }); }); 

这对我的API工作正常,但我也试图使用这些数据加载到我的Jade模板。

 var modules = require('./routes/modules'); // home page app.get('/', function(req, res) { res.render('index', { modules: modules }) }); app.use('/api/modules', modules); 

但是这只是不起作用,它使我不确定,就好像它不存在(当logging)。

如果我修改我的路由器到以下内容:

 res.render('index', { modules: modules }) 

它可以正常工作而不是通过我的API访问数据。

所以我的问题,我怎样才能使用这段代码为我的API和呈现到Jade模板。

你使用模块作为中间件是不正确的。 即

 app.use('/api/modules', modules); 

按照http://expressjs.com/en/guide/using-middleware.html中的规定,您的中间件应该调用next()函数。

 app.use(function (req, res, next) { console.log('Time:', Date.now()); next(); }); 

为了解决这个问题,你应该定义类似于索引路由的路由,但是你将使用res.send。

 var modules = require('./routes/modules'); // home page app.get('/', function(req, res) { res.render('index', { modules: modules }) }); app.get('/api/modules', function(req, res) { res.send({ modules: modules }) });