我正在使用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取消注释会产生相同的错误)
答案 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不应包含在邮递员正文中。