nestjs+typeorm 实现增删改查
为什么学nestjs,因为自己想要侵入微服务架构中的bff层,而本身自己对java的开发比较欣赏,层级结构很清晰,而nestjs可以说是node版本spring。
初始化nestjs项目
npm i -g @nestjs/cli
nest new project-name
执行这个会生成nestjs的项目模板
安装依赖
cd project-name
npm i
npm run start:dev
启动过后就可以在网页上输入localhost:3000,会有内容,一个基本的服务器就启动起来了。
orm框架选用typeorm,node.js世界中最成熟的对象关系映射器(ORM),因为是用ts编写的,可以和nest更好的集成。
npm install --save typeorm mysql
初始化的app.controller和app.service可以删除,
链接数据库
app.module.ts
import { Module, Logger } from '@nestjs/common';
import * as path from 'path';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Connection } from 'typeorm';
import { ConfigModule, ConfigService } from 'nestjs-config';
import { UserModule } from './core/user/user.module';
const entitiesPath =
process.env.NODE_ENV === 'prod'
? __dirname + '/**/*.entity{.ts,.js}'
: __dirname + '/**/*.entity{.ts,.js}';
Logger.log(process.env.NODE_ENV, '当前环境');
@Module({
imports: [
ConfigModule.load(path.resolve(__dirname, 'config', '**/!(*.d).{ts,js}'), {
modifyConfigName: name => name.replace('.config', ''),
}),
TypeOrmModule.forRoot({
type: 'type',
host:'localhost',
port: 3306,
username: 'username',
password: 'password',
database: 'database',
entities: [__dirname +'/**/*.entity{.ts,.js}'],
synchronize:true,
logging: true,
}),
UserModule],
controllers: [],
providers: [],
})
export class AppModule {
constructor(private readonly connection: Connection){}
}
以上的配置是链接数据库的配置,将user模块导入到Appmodule
查询数据库的数据
user.module.ts
import { Module } from '@nestjs/common';
import { UserController } from './user.controller';
import { UserService } from './user.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './user.entity';
@Module({
imports: [TypeOrmModule.forFeature([User])],
controllers: [UserController],
providers: [UserService],
})
export class UserModule {}
import: [TypeOrmModule.forFeature([User])],作用是将User实体类交给这个user模块使用
user.entity.ts
import { Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn, } from 'typeorm';
@Entity('user')
export class User {
@PrimaryGeneratedColumn({
type: 'int',
name: 'id',
comment: '主键id',
})
id: number;
@Column('varchar', {
nullable: false,
unique: true,
length: 150,
name: 'uuid',
generated: 'uuid',
comment: 'uuid',
})
uuid: string;
@Column('varchar', {
nullable: false,
unique: true,
length: 100,
name: 'name',
comment: '姓名',
})
name: string;
@Column('varchar', {
nullable: false,
name: 'password',
comment: '密码',
})
password: string;
@Column('tinyint', {
nullable: true,
default: () => 1,
name: 'is_active',
comment: '是否活跃',
})
isActive: number | null;
@Column('varchar', {
nullable: true,
length: 100,
name: 'email',
comment: 'email',
})
email: string | null;
@Column('varchar', {
nullable: true,
length: 11,
name: 'mobile',
comment: '手机号码',
})
mobile: string | null;
@Column('tinyint', {
nullable: true,
default: () => 0,
comment: '性别',
name: 'gender',
})
gender: number | null;
@CreateDateColumn({
type: 'datetime',
comment: '创建时间',
name: 'create_at',
})
createAt: Date;
@UpdateDateColumn({
type: 'datetime',
comment: '更新时间',
name: 'update_at',
})
updateAt: Date;
}
user.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
// import { TypeOrmCrudService } from '@nestjsx/crud-typeorm';
import { Repository } from 'typeorm';
import {User} from './user.entity'
@Injectable()
export class UserService {
constructor(@InjectRepository(User) private readonly userRepository:Repository<User>){}
getHello(): string {
return "hhhhhh";
}
async getUser():Promise<User>{
return await this.userRepository.findOne({name:"luoqianyu"});
}
}
在当前service使用。
user.controlller.ts
import { Controller, Get } from '@nestjs/common';
import { User } from './user.entity';
import {UserService} from './user.service';
@Controller()
export class UserController {
constructor(private readonly UserService: UserService) {}
@Get()
getHello(): string {
return this.UserService.getHello();
}
@Get("/getUser")
getUser():Promise<User>{
return this.UserService.getUser();
}
}
最后在网页上输入localhost:3000/getUser可以访问到当前的数据库中的数据