使用Nestjs,Typescript,Fastify和MongoDB的基本CRUD操作
#typescript #nestjs #mongodb #fastify

Fastify是一个网络框架,用于在Node.js中构建高效且高性能的Web应用程序和API。它旨在轻巧,专注于速度,使其特别适合需要低潜伏期和高吞吐量的应用。开发了快速的旨在解决现有node.js框架的某些缺点。

让我们去

创建您的Nestjs项目

npx nest new project-name

我们的项目名称是:fastify-mongo-crud,我们将使用纱线,但您可以选择列出的任何其他软件包管理器。

package manager choice

使用此命令添加快速软件包

yarn add @nestjs/platform-fastify

默认情况下,当您创建一个新的Nestjs项目时,Nest install@nestjs/platform-expressâxpack(请参见下图),

Platform express

因为我们将使用快速使用,所以我们不再需要这个Express平台了。


创建一个巢资源

npx nest generate resource articles --no-spec

然后选择REST API

Rest API

NEST会问您我想生成Crud入口点:键入no。

n

太好了!现在,正如我们已经知道的那样,默认框架是明确的,我们需要更改它以快速化。

在项目的根部中,将代码bellow传递到main.ts文件

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { FastifyAdapter,NestFastifyApplication} from '@nestjs/platform-fastify';

async function bootstrap() {
  const app = await NestFactory.create<NestFastifyApplication>(AppModule, new FastifyAdapter());
  await app.listen(3000);
}
bootstrap();

ps:如果您有以下问题:

Type 'NestFastifyApplication<RawServerDefault>' does not satisfy the constraint 'INestApplication'.

也许有兼容版本的@nestjs/platform-fastifyNestJS core packages,所以运行

yarn upgrade-interactive --latest

将依赖项更新到其最后一个稳定版本。

完成此操作后,将MongoDB安装到项目

yarn add @nestjs/mongoose mongoose

安装了猫鼬软件包后,我们需要将Mongoosemodule导入root AppModule。在此阶段,您的app.module.ts应该像:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ArticlesModule } from './articles/articles.module';
import { MongooseModule } from '@nestjs/mongoose';


@Module({
  imports: [ MongooseModule.forRoot('mongodb://mongO_uri'), ArticlesModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

不要忘记用真正的mongodb uri替换mongodb://mongO_uri

src/article/schema/article.schema.ts中创建我们的文章模式:

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { HydratedDocument } from 'mongoose';

export type ArticleDocument = HydratedDocument<Article>;

@Schema()
export class Article {
  @Prop()
  title: string;

  @Prop()
  slug: string;

  @Prop()
  content: string;  
}

export const ArticleSchema = SchemaFactory.createForClass(Article);

在您的文章中导入Mongoosemodule,文章和文章Chema.module.ts文件

import { Module } from '@nestjs/common';
import { ArticlesService } from './articles.service';
import { ArticlesController } from './articles.controller';
import { MongooseModule } from '@nestjs/mongoose';
import { Article, ArticleSchema } from './schema/article.schema';

@Module({
  imports:[MongooseModule.forFeature([{ name: Article.name, schema: ArticleSchema }])],
  controllers: [ArticlesController],
  providers: [ArticlesService]
})
export class ArticlesModule {}

是时候运行项目了,看看一切是否正常。

yarn start dev

运行它

如果没有,如果您有此错误:

const stringWidth = require('string-width');
Error [ERR_REQUIRE_ESM]: require() of ES Module

只需删除节点模块文件,然后再次安装所有依赖项即可。

太好了! MongoDB并快速添加并成功设置

clean console

现在创建我们的服务以发布数据库并从数据库中获取数据。

src/articles/articles.service.ts

import { Injectable } from '@nestjs/common';
import { Article } from './schema/article.schema';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';

@Injectable()
export class ArticlesService {
    constructor(@InjectModel(Article.name) private readonly articleModel: Model<Article>){}

    async postArticle( body: Article):Promise<Article> {
        const create = new this.articleModel(body)
        return create.save()
    }

    async getArticles(){
        return this.articleModel.find().exec()
    }
}

postArticle()在这里创建新文章,并将其保存到MongoDB数据库和getArticles(),以获取数据库中的所有文章

我们创建了想要的所有服务后,让我们创建控制器:

src/articles/articles.controller.ts

import { Body, Controller, Get, Post } from '@nestjs/common';
import { ArticlesService } from './articles.service';
import { Article } from './schema/article.schema';

@Controller('articles')
export class ArticlesController {
  constructor(private readonly articlesService: ArticlesService) {}

  @Post('create')
  postArticle( @Body() body : Article ){
    return this.articlesService.postArticle(body);
  }

   @Get('get-articles')
   getArticles(){
    return this.articlesService.getArticles();
   }
}

对于每个函数,我们定义了请求类型(发布或仅在此示例中获取),路径名和必要参数。

太好了!现在,让我们开放邮递员,看看我们是否可以发布并使用简单的快速API实现。

localhost:3000/articles/get-articles结果:

Get result

localhost:3000/articles/create结果:

Post result

恭喜,我们深入研究了基本的Crud操作世界,利用了Nestjs,TypeScript,Fastify和MongoDB的力量。通过掌握这些基本技术,您为创建强大的应用程序奠定了坚实的基础。当您继续探索和完善自己的技能时,请记住,开发人员的旅程是一个持续的进化。

有关fastify的更多信息ð¾:https://fastify.dev/

您可以在githubðð¾上找到整个项目:https://github.com/laetitiaouelle/fastify-mongo-crud

在那里跟随我:

https://linkedin.com/in/laetitia-christelle-ouelle-89373121b/

https://twitter.com/OuelleLaetitia

https://dev.to/ouelle

愉快的编码! ð