我正在做一个使用Express,& Sequelize的项目,遇到了一个问题:
我正在尝试创建一个api路由,只需单击一下按钮,就会在我的'member‘和'memberinstrument’表中创建一行。这些表在我的模型中有一个关联: member 'hasMany‘member & memberinstruments 'belongsTo’member。
这就是我现在所拥有的:
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');
}
})我正在postman中测试它,它只是说我有一个‘服务器错误’(如果我删除了整个memberInstrument发布部分,就不会发生这种情况),在节点中,我得到“无法读取未定义的属性'id‘”。我知道这一定与尝试创建member的时间有关,然后尝试为memberinstrument获取该成员id,但我不知道如何解决这个问题。
任何帮助都将不胜感激!
(编辑:我注释掉了UserId和MemberId,它成功地发布了。
取消注释UserId会产生相同的错误: UserId是一个可以为空的字段,所以如果我没有定义它,我不知道为什么它会出现服务器错误(或者我必须将它定义为null,但我不知道如何在postman中这样做,因为它来自.user而不是.body
仅取消对MemberId的注释会产生相同的错误)
发布于 2019-11-25 06:51:57
因为我是用Postman来做这件事的,而且不知道如何用它发送req.body,所以我收到了id错误。我将req.user.id更改为req.body.id,它将填充来自前端状态的信息,现在工作正常。
发布于 2020-01-18 11:26:31
我认为您没有必要在.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。
https://stackoverflow.com/questions/59012491
复制相似问题