使用Sequelizer一次将数据创建到三个表

时间:2019-07-08 10:03:51

标签: mysql node.js express sequelize.js

我想从表单中获取数据,并以此为基础,将数据添加到mySQL中的三个表中,我使用Sequelize这样做,但是我不怎么做,我当前的想法给出了错误:

  

未处理的拒绝错误[ERR_HTTP_HEADERS_SENT]:无法设置标题   将它们发送给客户之后

我的代码是这样的:

app.post("/device/add", (req, res) => {
    db.Devices.create({
      device_id: req.body.device_id,
      server: req.body.server,
      type: req.body.type
    })
      .then(result => {
        res.json(result);
      })
      .catch(err => {
        throw err;
      });

    db.Modules.create({
      device_id: req.body.device_id,
      device_options: req.body.device_options,,
      sleep_options: req.body.sleep_options
    })
      .then(result => {
        res.json(result);
      })
      .catch(err => {
        throw err;
      });

    db.Tests.create({
      device_id: req.body.device_id,
      gsm_tests: req.body.gsm_tests,
      led_tests: req.body.led_tests,
    })
      .then(result => {
        res.json(result);
      })
      .catch(err => {
        throw err;
      });
  });

我能以某种方式创建它吗?或如何使其工作

1 个答案:

答案 0 :(得分:0)

问题是您在发送响应后尝试再次发送响应。

有关更多说明,请参见here

您可以使用Promise.all()累积结果,然后通过一次res.json()调用将其发送。

const createDevice = db.Devices.create({
      device_id: req.body.device_id,
      server: req.body.server,
      type: req.body.type
    })

const createModules = db.Modules.create({
      device_id: req.body.device_id,
      device_options: req.body.device_options,
      sleep_options: req.body.sleep_options
    })
const createTests = db.Tests.create({
      device_id: req.body.device_id,
      gsm_tests: req.body.gsm_tests,
      led_tests: req.body.led_tests,
    })

Promise
    .all([createDevice , createModules , createTests ])
    .then(result=> {
        res.json({
                 devices: result[0],
                 modules: result[1],
                 test   : result[2]
              });

})
    .catch(err => {
       throw(err);
    });