序列化-使用创建的第一个表的ID创建多个表

时间:2019-11-23 21:34:18

标签: node.js express post sequelize-cli

我正在使用Express和Sequelize做一个项目,遇到了一个问题:

我正在尝试创建一个api路由,单击该按钮将在我的“ member”和“ memberinstrument”表中创建一行。这些表在我的模型中具有以下关联:成员'hasMany'成员仪表和成员仪表'belongsTo'成员。

这就是我现在拥有的:

router.post("/api/individual/signup", async (req, res) => {
    try {
        const member = await db.Member.create({
            memberName: req.body.memberName,
            location: `${req.body.city}, ${req.body.state}`,
            profilePicture: req.body.profilePicture,
            UserId: req.user.id
        })
        const memberInstrument = await db.MemberInstrument.create({
            instrument: req.body.instrument,
            MemberId: member.id
        });
        res.json({ member, memberInstrument });
    } catch (error) {
        console.log(error.message);
        res.status(500).send('Sever Error');
    }
})

我正在邮递员中对其进行测试,它只是说我有一个“服务器错误”(如果删除整个memberInstrument发布部分,则不会发生),并且在节点中,我收到“无法读取属性'id'未定义”。我知道它与尝试创建成员,然后尝试为memberinstrument获取该成员ID的时间有关,但是我不知道该如何解决。

任何帮助将不胜感激!

(编辑: 我注释掉了UserId和MemberId,并成功发布了。

仅对UserId取消注释会产生相同的错误: UserId是可为空的字段,因此如果我不定义它,我不知道为什么它会发生服务器错误(或者也许我必须将其定义为null,但我不知道如何在邮递员中这样做,因为它来自。用户而不是.body

仅对MemberId取消注释会产生相同的错误)

2 个答案:

答案 0 :(得分:0)

由于我是在邮递员中进行此操作的,并且不知道如何发送带有此信息的req.body,因此我遇到了id错误。我将req.user.id更改为req.body.id,它将使用来自前端状态的信息进行填充,并且现在可以正常工作。

答案 1 :(得分:0)

我认为您不必在.create()

中包含所有字段

尝试

router.post("/api/individual/signup", async (req, res) => {
try {
  const data = req.body;
  const member = await db.Member.create(data);
  const [registration, created] = member;
  if(created){
    //insert more of your code here on creating **MemberInstrument**, this is just a sample.
         await db.MemberInstrument.create(registration.member_id);
  }
  res.json({
    registration,
    created
  });

 } catch (error) {
  console.log(error);
  res.status(500);
  }
}

根据邮递员的要求,您将以json格式输入正文或字段,但ID除外,ID不应包含在邮递员正文中。