老师好,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 了

0
3
Tomas
嗯嗯 没事 就是两个字段在表里的类型没对上导致的
2022-11-27
共3条回复

Tomas

2022-11-27

试一下不调用 article.save 会不会被改呀

0
2
Alanrah
老师有啥好的解决办法么,需要更新views,还是需要save的
2022-11-27
共2条回复

Tomas

2022-11-27

看了下你代码,把 comments 的 entity 文件里的 referencedColumnName 去掉呢,只保留 name 配置

0
1
Alanrah
去掉了referencedColumnName,查询一次article详情之后,comments表里面对应article_id还是被篡改为null了
2022-11-27
共1条回复

Next.js+React+Node系统实战,搞定SSR服务器渲染

Next.js+React+Node系统实战,搞定SSR服务器渲染

421 学习 · 144 问题

查看课程