我有以下代码作为架构模块:

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/

10-10 20:25
查看更多