使用 Mongoose/Express/Node 在一个 POST 路由中保存多个模型文档
Posted
技术标签:
【中文标题】使用 Mongoose/Express/Node 在一个 POST 路由中保存多个模型文档【英文标题】:Save multiple model documents in one POST route with Mongoose/Express/Node 【发布时间】:2018-10-25 22:49:32 【问题描述】:我的搜索模型和结果模型是一对多的关系。我的用户会进行搜索,选择有用的结果,然后点击保存按钮。该保存按钮将触发app.post()
请求。这应该保存一个搜索实例和一个(或多个)选定结果实例。我可以使用以下代码成功保存 Search 实例:
controllers/searchController.js
const Search = require('../models/search');
exports.search_create_post = (req, res) =>
let newSearch = new Search( search_text: req.body.search_text );
newSearch.save((err, savedSearch) =>
if (err)
console.log(err);
else
res.send(savedSearch);
)
routes/search.js
const express = require('express');
const router = express.Router();
const search_controller = require('../controllers/searchController');
//Search Routes
router.get('/', search_controller.search_home);
router.get('/results', search_controller.search_results_get);
router.post('/', search_controller.search_create_post);
module.exports = router;
我怎样才能让我的用户点击一次保存按钮将保存上面的搜索实例以及结果?
【问题讨论】:
【参考方案1】:我最终通过将两个回调传递到我的post()
路由并在第一个内部调用next()
以及通过req
对象传递第二个所需的数据来完成我需要的操作。我的代码如下:
routes/search.js
router.post('/', search_controller.search_create_post, result_controller.result_create_post);
controllers/searchController.js
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();
)
;
controllers/resultController.js
exports.result_create_post = (req,
let newResult = new Result( url: 'req.body.url', search: req.searchData );
newResult.save((err, savedResult) =>
if (err)
console.log(err);
else
res.send(savedResult);
)
;
【讨论】:
以上是关于使用 Mongoose/Express/Node 在一个 POST 路由中保存多个模型文档的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?