我有以下.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();
})
};