老师好,comments 表里面的 article_id 被篡改为 NULL
来源:5-9 评论列表展示

Alanrah
2022-11-25
触发步骤:
1.新建评论成功,这时候在navicat刷新comments表,数据一切正常。
2.然后在文章详情页请求 article 信息,和课程代码一样,
const article = await articlesRepo.findOne({
where: {
id: +id, // id是query传过来的articleId
},
relations: ['user', 'comments', 'comments.user'],
});
第一次请求返回的commens正常,但是这个查询操作,把comments数据表里面,article_id: 1 都给改成NULL了,如下图:
排查了发表评论没问题,就是查询一次文章详情,就会触发这个问题。对应的entity和老师的源码对比了下,也没看出啥问题😞
git地址:https://github.com/Alanrah/my-nextjs-blog
查询article详情文件路径: /pages/api/article/detail.ts
数据表新建:/sql/comments.sql
求助
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
注释掉entity里面 referencedColumnName ,新增文章评论两条,请求文章详情一次,comments表里面关联的 article_id 依然被置为null了
为null的那两行的,article_id应该是6才对
//////////////////////////////////////////////////////////////////////////////////////////////////
新增三条评论
查询文章详情,不调用 articlesRepo.save(article)
article_id 没有被篡改……
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
最后发现是entity定义的问题。comments新建后返回的id是string,虽然很迷惑,但是按照课程里面改了下:
这下comments新建后返回的id是number,神奇的bug也消失了…………
3回答
-
Tomas
2022-11-27
两个点可以试一下哈:
1. 我看你代码里 entity 都没有显示设定主键 id 可以参考下代码把 id 声明出来试试
2. 看一下 comments 表里 artocle_id 字段和 article 的 id 主键字段都是不是 number
我怀疑可能是字段关联类型在数据库里两个对不上,导致 save 的时候设为 null 了
032022-11-27 -
Tomas
2022-11-27
试一下不调用 article.save 会不会被改呀
022022-11-27 -
Tomas
2022-11-27
看了下你代码,把 comments 的 entity 文件里的 referencedColumnName 去掉呢,只保留 name 配置
012022-11-27
相似问题