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

Passing JSON to Jade and using the same data for API access

本文关键字:数据 访问 API JSON Jade      更新时间:2023-09-26

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

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