项目服务器部署
nestjs打包
由于nestjs在本地打包运行是没有问题的,但是按照正常的npm run build 发布到服务器的时候就会报组件不存在的问题,尝试了调整组件位置等方法,主要是由于打包后的文件指向的是相对本机的目录,但是服务器上面环境和本机不一样,于是想到在服务器上面打包项目,
#在项目目录执行
npm run build
# 然后在dist目录执行以下命令
node main
更好的方式是使用pm2 管理node.js项目
mongodb设置
database.provider.ts
import * as mongoose from 'mongoose';
export const databaseProviders = [
{
provide: 'DATABASE_CONNECTION',
useFactory: (): Promise<typeof mongoose> =>
mongoose.connect('mongodb://username:password@xxx.xxx.xxx.xxx:27017/?authSource=dbname'),
},
];
database.module.ts
import { Module } from '@nestjs/common';
import { databaseProviders } from './database.providers';
@Module({
providers: [...databaseProviders],
exports: [...databaseProviders],
})
export class DatabaseModule {}
nestjs模块
实际的业务组件
group.module.ts
import { Module } from '@nestjs/common';
import { GroupController } from './group.controller';
import { GroupService } from './group.service';
import { GroupProviders } from './group.providers';
import { DatabaseModule } from '../database/database.module';
@Module({
imports: [DatabaseModule],
controllers: [GroupController],
providers: [
GroupService,
...GroupProviders,
],
exports: [
]
})
export class GroupModule { }
group.controller.ts
import { Controller, Post, Body, Get, Param, Delete } from '@nestjs/common';
import { Group } from './interfaces/group.interface';
import { CreateGroupDto } from './dto/create-group.dto';
import { GroupService } from './group.service';
import { ApiTags } from '@nestjs/swagger';
@ApiTags('GroupApi')
@Controller('api/group')
export class GroupController {
constructor(
private readonly groupService: GroupService
) { }
@Post('add')
async create(@Body() createGroupDto: CreateGroupDto): Promise<Group> {
return this.groupService.create(createGroupDto);
}
@Get('all')
async findAll(): Promise<Group[]> {
return this.groupService.findAll();
}
@Get('/:id')
async findById(@Param('id') _id: string): Promise<Group> {
console.log(_id);
return this.groupService.findById(_id);
}
@Post('update')
update(@Body() body: CreateGroupDto): Promise<any> {
console.log(body);
return this.groupService.update(body);
}
@Delete('delete/:id')
async delete(@Param('id') _id: string): Promise<any> {
return this.groupService.delete(_id);
}
}
group.provider.ts
import { Connection } from 'mongoose';
import { GroupSchema } from './schemas/group.schema';
export const GroupProviders = [
{
provide: 'Group_MODEL',
useFactory: (connection: Connection): any => connection.model('Group', GroupSchema,'group'),
inject: ['DATABASE_CONNECTION'],
},
];
group.service.ts
import { Model } from 'mongoose';
import { Injectable, Inject, HttpException, HttpStatus } from '@nestjs/common';
import { Group } from './interfaces/group.interface';
import { CreateGroupDto } from './dto/create-group.dto';
@Injectable()
export class GroupService {
constructor(
@Inject('Group_MODEL')
private groupModel: Model<Group>,
) { }
async create(groupDto: CreateGroupDto): Promise<Group> {
groupDto.create_time = (new Date()).toLocaleString();
console.log('add group:', groupDto);
const createdGroup = new this.groupModel(groupDto);
return createdGroup.save();
}
async findAll(): Promise<Group[]> {
return this.groupModel.find().exec();
}
async findById(id: string): Promise<Group> {
return await this.groupModel.findById(id).exec()
}
async update(createGroupDto: CreateGroupDto): Promise<any> {
if (!createGroupDto) {
throw new HttpException('请求参数不正确', HttpStatus.FORBIDDEN);
}
const where = {
};
const update = {
$set: {
}
}
return await this.groupModel.updateOne(where, update);
}
async delete(Id: string): Promise<any> {
console.log(Id);
if (Id) {
throw new HttpException('请求参数不正确', HttpStatus.FORBIDDEN);
}
return await this.groupModel.deleteOne({ _id: Id });
}
}
centos服务器配置cnpm
在阿里云上面用npm 安装文件速度很慢,切换到淘宝镜像
npm install cnpm -g --registry=https://registry.npm.taobao.org
cnpm install
速度嗖嗖的
参考链接
1nestJs项目打包部署的方法
2.十分钟部署centos+nodejs+nestjs+caddy+pm2线上环境
3npm速度过慢的解决方案