使用Mongoose / Express / Node在一个POST路由中保存多个模型文档

时间:2018-05-16 02:00:58

标签: node.js mongodb express mongoose

我与我的搜索模型和结果模型有一对多的关系。我的用户将进行搜索,选择有用的结果,然后点击保存按钮。该保存按钮将触发app.post()请求。这应该保存搜索的实例和所选结果的一个(或多个)实例。我可以使用以下代码成功保存搜索实例:

控制器/ 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);
        }
    })


路由/ 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 个答案:

答案 0 :(得分:0)

我最终通过将两个回调传递到我的post()路由并在第一个回调中调用next()以及通过req对象传递所需的第二个数据来完成我需要的操作。我的代码如下:

<强>路由/ search.js

router.post('/', search_controller.search_create_post, result_controller.result_create_post);


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


控制器/ 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);
        }
    })
};