Может ли запрос POST принять два обратных вызова и может ли первый передать данные второму? - PullRequest
0 голосов
/ 17 мая 2018

У меня есть следующий .post() запрос:

const express = require('express');
const router = express.Router();
const search_controller = require('../controllers/searchController');
const result_controller = require('../controllers/resultController');

//Search Routes

router.post('/', search_controller.search_create_post);

module.exports = router;


Могу ли я добавить второй обратный вызов для запуска первого обратного вызова, а затем второй обратный вызов как таковой:

router.post('/', search_controller.search_create_post, result_controller.result_create_post)

Нужно ли было бы next() где-нибудь в этих функциях создания? И могу ли я также передать данные из обратного вызова search_create_post в обратный вызов result_create_post? Я хотел бы передать в только что созданный идентификатор объекта поиска.

Моя текущая search_controller.search_create_post функция такая:

exports.search_create_post = (req, res, next) => {
    let newSearch = new Search({ search_text: req.body.search_text });

    newSearch.save((err, savedSearch) => {
        if (err) {
            console.log(err);
        } else {
            res.send(savedSearch);
        }
    })
};

1 Ответ

0 голосов
/ 17 мая 2018

Вы можете использовать это (в зависимости от того, как написаны ваши функции):

// option A
router.post('/', search_controller.search_create_post, result_controller.result_create_post)

// options B
router.post('/', search_controller.search_create_post)
router.post('/', result_controller.result_create_post)

Если при поиске необходимо передать данные в результат, вы можете установить req.search_data в search_create_post изатем получите значение в result_create_post.

Посмотрите на https://expressjs.com/en/guide/using-middleware.html. На этой странице есть несколько хороших примеров.

app.get('/user/:id', function (req, res, next) {
  console.log('ID:', req.params.id)
  next()
}, function (req, res, next) {
  res.send('User Info')
})

// handler for the /user/:id path, which prints the user ID
app.get('/user/:id', function (req, res, next) {
  res.end(req.params.id)
})

на основе вашегокомментарий ниже:

Вы могли бы сделать это ...

exports.search_create_post = (req, res, next) => {
  let newSearch = new Search({ search_text: req.body.search_text });
  newSearch.save((err, savedSearch) => {
    if (err) {
      console.log(err);
    } else {
      req.searchData = savedSearch;
    }
    next();
  })
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...