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

标签 javascript node.js express

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

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

但这根本行不通,它给我 undefined 就好像它不存在一样(记录时)。

如果我将路由器修改为以下内容:

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/

相关文章:

javascript - 如何在 React 组件内部去抖动 redux Action

javascript - 使用 AJAX 更新 d3 图表的最佳方法是什么

javascript - 如何在单击按钮时调用随机函数?

javascript - 生成子 Node 进程并将其通过管道传输到当前 Node 进程有什么用?

node.js - 如何在中间件中将 bodyParser 上传限制设置为特定路由而不是全局设置?

node.js - 有没有办法阻止express渲染静态目录中的文件?

javascript - 在使用内联数组注释和 Fluent API 定义的 Controller 上使用 ui-router 的解析

node.js - 如何使用sequelize通过外键值整齐地查询?

node.js - launchRequest 的 Alexa 处理程序语法

javascript - Express 服务器 - GET 请求返回 404(未找到)