【问题标题】:How to save different objects with one post request in Express?如何在 Express 中通过一个 post 请求保存不同的对象?
【发布时间】:2018-10-21 03:18:08
【问题描述】:

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

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

controllers/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));
    } };


routes/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目的)?

【问题讨论】:

    标签: node.js express post sequelize.js


    【解决方案1】:

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

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

    【讨论】:

    • 所以你是说在 POST 请求中创建一个控制流来处理每次保存?例如,将search 对象作为变量,然后设置一个保存变量的if 语句。如果变量保存,则继续保存 result 对象,传入新创建的搜索变量 id?
    • 不是控制流。如果业务逻辑不同,你应该有不同的端点。我是说保存搜索对象的后续逻辑应该在同一个端点中,可能是承诺链的一部分。
    猜你喜欢
    • 2017-05-04
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 2017-03-14
    相关资源
    最近更新 更多