Сохраните несколько документов модели в одном POST-маршруте с Mongoose / Express / Node - PullRequest
0 голосов
/ 16 мая 2018

У меня отношения один-ко-многим с моей моделью поиска и моделью результатов. Мой пользователь выполнит поиск, выберет полезные результаты и нажмет кнопку «Сохранить». Эта кнопка сохранения нажмет 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 голосов
/ 17 мая 2018

В итоге я сделал то, что мне было нужно, передав два обратных вызова в мой маршрут 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);
        }
    })
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...