新建 NestJS 项目并实现查询

安装 NestJS 并新建 nest 项目

  • 安装 node 和 npm
  • 使用命令新建项目 nest new xStorageServer

添加文件夹

  • nest g module attachment 生成附件模块
    • 新建文件夹controllers services models
    • nest g controller attachment --no-spec
    • nest g service attachment --no-spec
  • nest g module common 生成公共模块
    • 新建文件夹configentitiesenums

增加 TypeORM

  • npm i @nestjs/typeorm
  • npm i typeorm
  • npm i mssql
  • 在对应的 app.module.ts 中引入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
...
imports: [
TypeOrmModule.forRoot({
type: 'mssql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [],
synchronize: false,
}),
],
...
})

  • entities中新建对应entity,再添加对应的entity添加到forFeatureentities

增加配置文件

  • npm i @nestjs/config
  • 新增 .env 文件
  • 在对应的 module 中引入
1
2
3
4
5
6
7
8
import { ConfigModule } from '@nestjs/config';

@Module({
...
imports: [ConfigModule.forRoot()],
...
})

  • config文件夹中新建config.database.serviceconfig.service用来获取配置文件中的参数。
  • config.service增加以下内容获取对应的配置文件注册到database
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/* eslint-disable @typescript-eslint/ban-ts-comment */
import { registerAs } from "@nestjs/config";
import { ConnectionOptions } from "typeorm";

const databaseConfig = registerAs(
"database",
(): ConnectionOptions => ({
// @ts-ignore
type: process.env.DATABASE_TYPE,
host: process.env.DATABASE_HOST,
port: parseInt(process.env.DATABASE_PORT, 10),
database: process.env.DATABASE_NAME,
instance: process.env.DATABASE_INSTANCE,
username: process.env.DATABASE_USERNAME,
password: process.env.DATABASE_PASSWORD,
schema: process.env.DATABASE_SCHEMA,
synchronize: process.env.DATABASE_SYNC === "true",
requestTimeout: parseInt(process.env.DATABASE_REQUEST_TIMEOUT, 10),
// @ts-ignore
logging: process.env.DATABASE_LOGGING,
autoLoadEntities: true,
})
);

export default [databaseConfig];
  • config.database.service增加读取config的地方
1
2
3
4
5
6
7
8
@Injectable()
export class ConfigDatabaseService implements TypeOrmOptionsFactory {
constructor(private readonly configService: ConfigService) {}

createTypeOrmOptions(): TypeOrmModuleOptions {
return this.configService.get<ConnectionOptions>("database");
}
}
  • 替换对应typeorm配置文件
1
2
3
4
5
6
7
8
9
10
11
TypeOrmModule.forRoot({
// @ts-ignore
type: process.env.DATABASE_TYPE,
host: process.env.DATABASE_HOST,
port: parseInt(process.env.DATABASE_PORT),
database: process.env.DATABASE_NAME,
username: process.env.DATABASE_USERNAME,
password: process.env.DATABASE_PASSWORD,
synchronize: process.env.DATABASE_SYNC == 'true',
autoLoadEntities: true,
}),

此时启动项目通过url就可以查询数据库中的数据了。
然后我们可以根据自己的需求去写service

增加 Log 和身份验证

下一期再更新吧 🤣。最近在忙大事等有时间再继续吧 🤷‍♂️。

后记

因为现在在学习 nest ,所以主要是记录一下学习的过程,很多基础的东西没有详细记录。