nestjs+mongodb项目 centos服务器部署踩坑

19 篇文章 0 订阅
1 篇文章 0 订阅

项目服务器部署

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速度过慢的解决方案

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值