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