我有以下代码作为架构模块:
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);
但这是行不通的,它给我未定义的好像它不存在(登录时)。
如果我将路由器修改为以下内容:
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 })
});
关于javascript - 将JSON传递给Jade并使用相同的数据进行API访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37127642/