Перемещение данных с контроллера на res.render - PullRequest
0 голосов
/ 16 февраля 2019

Мне интересно, как я могу взять и сделать что-то вроде return res.status(400).json({message: 'This is my message'}) в контроллере / промежуточном программном обеспечении, тогда я хочу иметь возможность в обратном вызове или другом пользовательском контроллере сделать res.render('test', {message}), где message происходит от моего контроллера выше,Я использую EJS для своего движка вида, из которого исходит часть {message}.

Я посмотрел в Интернете и на SO, но пока не нашел хорошего объяснения того, как правильно это сделать.Я знаю, что без части callback res.render у меня может работать мой API должным образом и он возвращает правильный JSON почтальону.

1 Ответ

0 голосов
/ 16 февраля 2019
  • Вы можете передавать данные из связующего ПО в обработчик , помещая данные в объект 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 как жестко запрограммированную переменную, но вы можете определить определенную логику, чтобы извлечь ее из тела или параметров вашего запроса
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...