POST请求是否可以接受两个回调,并且第一个可以将数据传递给第二个回调吗?

时间:2018-05-16 21:44:10

标签: javascript express post

我有以下.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对象的id。

我当前的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 :(得分:2)

您可以这样使用(基于函数的编写方式):

// 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();
  })
};