Postman操作Film数据库POST/Update触发SequelizeEagerLoadingError排查
解决SequelizeEagerLoadingError: film is not associated to film错误
嘿,我看你在通过Postman操作film表的POST和更新时碰到了Unhandled rejection SequelizeEagerLoadingError: film is not associated to film的错误,之前操作actor表还挺正常的对吧?咱们来揪出代码里的问题:
问题1:GET单条film接口的关联配置错误
在routes/films.js的router.get('/:id')接口里,你写了:
.findByPk(parseInt(req.params.id), { include: [{ model: models.film }] })
你这是尝试把film表和自身做关联,但你的assocation.js里只定义了film和actor的多对多关联,根本没有film到film的关联配置,这就是触发那个错误的直接原因!如果你的需求是查询film时顺带关联它的actor,应该改成:
.findByPk(parseInt(req.params.id), { include: [{ model: models.actor }] })
问题2:POST接口错用了模型
你的POST接口是用来创建film的,但你却调用了models.actor.findOrCreate——不仅模型用错了,actor表也没有title字段啊!修正成film模型才对:
router.post('/', function (req, res, next) { models.film.findOrCreate({ where: { title: req.body.title } }) .spread(function(result, created) { if (created) { res.redirect('/films/' + result.film_id); } else { res.status(400); res.send('Film already exists'); } }) });
问题3:GET列表接口的笔误
在router.get('/')里,你写了models.find.findAll,这明显是笔误,应该是models.film.findAll,不然根本找不到对应的模型方法:
router.get('/', function(req, res, next) { models.film .findAll({ attributes: ['film_id','title','description', 'release_year'] }) .then(filmsFound => { res.setHeader('Content-Type', 'application/json'); res.send(JSON.stringify(filmsFound)); }); });
额外调试建议
你可以在接口的catch回调里打印错误信息,比如在PUT接口的catch里加console.log(err),这样调试的时候能更直观地看到问题细节。
把这些错误修正之后,你的POST、更新操作应该就能正常运行,那个关联加载的错误也会消失啦!
内容的提问来源于stack exchange,提问作者Ern
相关产品推荐
相关产品推荐

