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回调吗?我想传入新创建的搜索对象的 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);
}
})
};

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

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

如果搜索需要将数据传递到结果,则可以在search_create_post中设置req.search_data,然后在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();
})
};

最新更新