如何在Express中使用一个帖子请求保存不同的对象?

时间:2018-05-10 19:06:49

标签: node.js express post sequelize.js

这似乎是一件非常基本的事情,但我无法找到正确的方法。 My Node / Express / Sequelize项目本质上将保存单个用户搜索(到Searches表)和搜索结果中的一个或多个链接(到Results表)。用户搜索,获取结果,选择他们认为有用的结果,然后点击保存按钮以保存搜索查询和所选结果。

搜索有很多结果,因此Result对象将具有searchId的外键(这使我认为需要首先保存搜索对象以在每个Result对象上放置一个id)。到目前为止,我可以使用以下代码成功保存搜索项:

控制器/ search.js

const Search = require('../models').Search;

module.exports = {
    create(req, res) {
        return Search
        .create({
          text: req.body.search_text  
        })
        .then(search => res.status(201).send(search))
        .catch(error => res.status(400).send(error));
    } };


路由/ index.js

const searchController = require('../controllers').search;
const resultController = require('../controllers').result;
const axios = require('axios');
const bingWebSearch = require('../helpers/bingWebSearh')

module.exports = (app) => {

    //some app.get requests here;

    app.post('/search/results', searchController.create);
};


那个app.post应该将搜索保存到搜索表中,并将(可能的)多个结果保存到结果表中,并将该搜索对象id作为关联。我应该怎么处理这个?它应该在一个app.post请求中,还是应该分成两个,第一个保存搜索,然后以某种方式转到第二个app.post请求来处理结果(并且还传入id来自新创建的搜索对象)?

1 个答案:

答案 0 :(得分:0)

请记住,配置的http端点(GET / POST / DELETE等)充当服务器和客户端之间的接口,用于某种通信。

除非您需要来自客户端的反馈/输入,否则您只能将处理逻辑作为一个端点的一部分来处理。在您的情况下,/search/results端点可以将这两个表中的数据保留为单个端点调用的一部分。显而易见,您将使代码模块化并使逻辑尽可能松散耦合。