⭐️ 首次折腾 NestJS 的惨痛教训

2021-09-14

@Innei 的后端用 NestJS 编写,我作为一个弱鸡,只会半桶水瞎 JB 改的,首先第一件事就是想办法让这个项目在我电脑上跑起来了。

首先第一步安装依赖错误,估计是包版本太新,更换为 NPM 官方源解决。之后提示 Node 版本过旧,需要升级到 V16,他问我为什么不用 NVM 管理,于是我恍恍惚惚把我电脑的环境干了好几次,NVM 最后被干没了,但终于换成了 V16。由于项目有 pnpm.lock 文件,于是我也安装了 pnpm。

npm install -g pnpm

TypeORM 标配 Redis 作为查询缓存,上次我集成环境升级之后爆炸了,局域网内没有任何一个 Redis 服务器,于是就用 brew 帮我整一个 redis 先用着了。

brew install redis

然后执行 pnpm start 报错,改成 pnpm start:dev 开发模式,依旧报错,大概看出来是 SQL 执行错误。翻了下 TypeORM 的 文档,给配置文件增加了 logging 属性打印错误。

host: '10.7.9.2',
port: 2345,
username: '21-09-srss',
password: 'xxxxxx',
database: '21-09-srss',
logging: true // <---

根据错误执行的 SQL 内容,我认为大概是字段和属性错误,我定位到了表结构相关文件 xxxx.entity.ts,故修改如下代码:

// datetime 不能用 TimeStamp,报错
// @Column({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' })
@Column({ type: 'datetime', default: () => null })
@ApiHideProperty()
created_at: Date

并根据我的数据库结构修改所有 Entity 文件的名称:

// @Entity({ name: 'sites' })
@Entity({ name: 'srss_sites' })
...

至此,服务暂时能跑起来了。于是今晚的直播就推掉了,全程耗时 2h+,真是心累 🥱!这里面有些我不太懂干什么的代码,大概列出来吧:

import { argv } from 'yargs' // 这个包是干什么的,为什么从这里取出了服务端口号

也说下我得知的一些新的:

Reflect.deleteProperty(user, 'password') // 反射对象,类似 delete user.password
多云 烦躁
概览页 时间轴
奇趣音乐盒 技术源于 Kico Player
Emmm,这里是歌词君