将数据从控制器移动到渲染器

时间:2019-02-16 16:56:03

标签: node.js express controller

我想知道如何在控制器/中间件中进行return res.status(400).json({message: 'This is my message'})之类的操作,然后我希望能够在回调或另一个自定义控制器中进行res.render('test', {message}),其中{{1} }来自上面的控制器。我正在将EJS用于我的视图引擎,这是message部分的来源。

我已经在网上和SO上四处查看,但是还没有找到有关如何正确执行此操作的很好的解释。我知道,没有回调res.render部分,我可以使我的API正常工作,并将正确的JSON返回邮递员。

1 个答案:

答案 0 :(得分:0)

  • 您可以通过将数据放在req对象中,将数据从中间件传递给处理程序。中间件被定义为类似(req, res, next) => { // Do stuff here}的函数。在其中您可以执行req.somePayloadIWantToPass = {hello: 'world'};
  • 以您为例,传递信息可能看起来像这样

const app = require("express")();
const port = 3000;

// Your middleware
app.use((req, res, next) => {
  const payload = { message: "this is my message", statusCode: 400 };
  req.payload = payload;
  next();
});

// Your request handler
app.get("/", (req, res) => {
  const { message, statusCode } = req.payload;
  res.status(statusCode).render({ message });
});

app.listen(port, () => console.log(`Example app listening on port ${port}!`));

注释

  • 对于某个请求,您不能多次使用send
  • 在这里,我们将payload定义为硬编码变量,但是您可以定义某种逻辑以从请求的正文或参数派生它