Fastify是一个网络框架,用于在Node.js中构建高效且高性能的Web应用程序和API。它旨在轻巧,专注于速度,使其特别适合需要低潜伏期和高吞吐量的应用。开发了快速的旨在解决现有node.js框架的某些缺点。
让我们去
创建您的Nestjs项目
npx nest new project-name
我们的项目名称是:fastify-mongo-crud,我们将使用纱线,但您可以选择列出的任何其他软件包管理器。
使用此命令添加快速软件包
yarn add @nestjs/platform-fastify
默认情况下,当您创建一个新的Nestjs项目时,Nest install@nestjs/platform-expressâxpack(请参见下图),
因为我们将使用快速使用,所以我们不再需要这个Express平台了。
用
创建一个巢资源
npx nest generate resource articles --no-spec
然后选择REST API
NEST会问您我想生成Crud入口点:键入no。
太好了!现在,正如我们已经知道的那样,默认框架是明确的,我们需要更改它以快速化。
在项目的根部中,将代码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-fastify
和NestJS 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并快速添加并成功设置
现在创建我们的服务以发布数据库并从数据库中获取数据。
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
结果:
localhost:3000/articles/create
结果:
恭喜,我们深入研究了基本的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
愉快的编码! ð