NestJs

7 篇文章 0 订阅
3 篇文章 0 订阅

NestJs

介绍Nest
Nest(NestJS)是一个框架,用于构建高效,可扩展的Node.js服务器端应用程序。它使用渐进式JavaScript,使用TypeScript构建并完全支持TypeScript(但仍使开发人员能够使用纯JavaScript编码),并结合了OOP(面向对象编程),FP(函数式编程)和FRP(函数式响应式编程)的元素。

1 安装nest

首先对于Node.Js的本版要求是(版本 >= 12,v13 除外)

1-1.淘宝镜像
安装完成nodejs后,npm install package 比较慢的话,建议使用淘宝镜像来安装包比较快,所以请先安装淘宝镜像

注意:

旧的cnpm域名已经停止使用(2022.02.31)
http://npm.taobao.org

新的Web 站点:https://npmmirror.com,Registry Endpoint:https://registry.npmmirror.com

npm install -g cnpm --registry=https://registry.npmmirror.com

1-2.安装nestJs脚手架nest/cli

注意:如果脚本策略被禁止了权限会安装不成功的,会报错。需要在powershell或者cmd中执行如下命令就可以把策略修改成想要的了

Set-ExecutionPolicy RemoteSigned

在这里插入图片描述
安装脚手架nest/cli

cnpm i -g  @nestjs/cli

1-3.查看nest帮助以及版本号等信息

nest --help
nest --version

在这里插入图片描述

1-4.创建nestjs项目demo

nest new demo
// new  可以简写成 n(别名)
nest n demo

默认会生成如下
在这里插入图片描述

|-- app.controller.ts
|-- app.controller.spec.ts
|-- app.module.ts
|-- app.service.ts
|-- main.ts

文件名称描述
app.controller.ts具有单个路由的基本控制器。
app.controller.spec.ts控制器的单元测试。
app.module.ts应用程序的根模块。
app.service.ts使用单一方法的基本服务。
main.ts使用核心函数创建 Nest 应用程序实例的应用程序的入口文件。NestFactory

1-5.启动应用程序

cd demo
npm run start

// 重启服务, 加上 dev 就能监听文件修改了
npm run start:dev

在浏览器中访问http://localhost:3000/

1-6 项目结构
Nest 有两种组织代码的模式:

  • 标准模式
  • monorepo模式

1-6-1 标准模式
可用于构建具有自己的依赖项和设置的单个以项目为中心的应用程序,并且不需要针对共享模块进行优化或优化复杂生成。这是默认模式。

1-6-2 monorepo模式
此模式将代码工件视为轻量级 monorepo 的一部分,可能更适合开发人员团队和/或多项目环境。它自动化了构建过程的某些部分,以便于创建和组合模块化组件,促进代码重用,使集成测试更容易,可以轻松共享项目范围的工件(如规则和其他配置策略),并且比 github 子模块等替代方案更易于使用。Monorepo 模式使用文件中表示的工作区的概念来协调 monorepo 组件之间的关系。

2 nest 命令

2-1.命令1

命令别名描述
newn搭建新的标准模式应用程序,其中包含运行所需的所有样板文件。
generateg基于原理图生成和/或修改文件。
build将应用程序或工作区编译为输出文件夹。
start编译并运行应用程序(或工作区中的默认项目).
add编译并运行应用程序(或工作区中的默认项目)。
infoi显示有关已安装的嵌套包的信息和其他有用的系统信息。

2-2 命令2

名称别名描述
applicationapplication在单存储库中生成一个新应用程序(如果是标准结构,则转换为单存储库)。
classcl生成一个新类
configurationconfigGenerate a CLI configuration file
controllerco生成控制器声明
decoratord生成自定义修饰器
filterf生成筛选器声明
gatewayga生成网关声明
guardgu生成保护声明
interceptoritc生成侦听器声明
interfaceitf生成接口
middlewaremi生成中间件声明
modulemo生成模块声明。
pipepi生成管道声明
providerpr生成提供程序声明
resolverr生成解析程序声明
services生成服务声明
librarylib在单存储库中生成一个新库(如果是标准结构,则转换为单存储库)。
sub-appappGenerate a new application within a monorepo
resourceres生成新的 CRUD 资源。

//创建user模块,也可以使用 mo 别名生成
nest g module user 
nest g mo user 

//创建user控制器,也可以使用 co 别名生成
nest g controller user
nest g co user

//创建user服务,也可以使用 s 别名生成
nest g service user
nest g s user

在这里插入图片描述

例如1:创建新的(标准模式)Nest 项目

nest new <name> [options]

nest n <name> [options]

例如2:嵌套生成
根据原理图生成和/或修改文件

nest generate <schematic> <name> [options]
nest g <schematic> <name> [options]

创建库

nest g library my-library

3 框架

3-1 nestJs默认可以和Express、Fastify这两款NodeJs框架无缝配合使用

  • Express
  • Fastify

Express官网

通过npm安装express框架

npm install express --save

创建项目流程

mkdir myapp
cd myapp
npm init
npm install express

fastify官网

Fastify,快速并且低开销的 web 框架,专为 Node.js 平台量身打造

通过 NPM 安装 fastify:

npm install fastify

创建server.js文件

// Require the framework and instantiate it
const fastify = require('fastify')({ logger: true })

// Declare a route
fastify.get('/', async (request, reply) => {
 return { hello: 'world' }
})

// Run the server!
const start = async () => {
 try {
  await fastify.listen(3000)
 } catch (err) {
  fastify.log.error(err)
   process.exit(1)
}
}
start()
~~~

启动服务

node server

使用npm安装 fastify-cli:

npm install --global fastify-cli

使用fastify-cli创建新项目

fastify generate myproject

3-2 框架类型:

  • NestExpressApplication
  • NestFastifyApplication

指定使用哪个框架类型

注意:
除非你实际想要访问框架底层平台 API,否则无需指定类型

const app = await  NestFactory.create<NestExpressApplication>(AppModule);

4 接口

OpenAPI 规范是一种与语言无关的定义格式,用于描述 RESTful API。Nest提供了一个专用模块,允许通过利用装饰器生成这样的规范。

4-1 安装依赖@nestjs/swagger

npm install --save @nestjs/swagger

使用类初始化 Swagger:main.tsSwaggerModule

import { NestFactory } from '@nestjs/core';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  const config = new DocumentBuilder()
    .setTitle('Cats example')
    .setDescription('The cats API description')
    .setVersion('1.0')
    .addTag('cats')
    .build();
  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('api', app, document);

  await app.listen(3000);
}
bootstrap();

要考虑这些参数

  • SwaggerModule
  • @Body()
  • @Query()
  • @Param()
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您的问题是 "nest elastic search",我理解为您想了解 Nest.js 中如何使用 ElasticSearch。Nest.js 是一个基于 Node.js 的 Web 框架,它提供了一些便捷的工具和模块来帮助我们构建高效、可扩展的应用程序。而 ElasticSearch 是一个基于 Lucene 的搜索引擎,它提供了强大的全文搜索和分析功能。 在 Nest.js 中使用 ElasticSearch,可以使用官方提供的 Elasticsearch.js 客户端库,也可以使用第三方库 nest-elasticsearch。使用 Elasticsearch.js 客户端库,可以直接在 Nest.js 中调用 ElasticSearch 的 REST API,进行数据的增删改查等操作。而使用 nest-elasticsearch,则可以更加方便地集成 ElasticSearch 到 Nest.js 应用中,提供更加友好的 API 接口。 以下是使用 nest-elasticsearch 的示例代码: 首先安装依赖: ``` npm install --save @nestjs/elasticsearch elasticsearch ``` 然后在模块中引入 ElasticsearchModule,并配置连接信息: ```typescript import { Module } from '@nestjs/common'; import { ElasticsearchModule } from '@nestjs/elasticsearch'; @Module({ imports: [ ElasticsearchModule.register({ node: 'http://localhost:9200', }), ], }) export class AppModule {} ``` 接着在服务中注入 ElasticsearchService,并使用它进行数据操作: ```typescript import { Injectable } from '@nestjs/common'; import { ElasticsearchService } from '@nestjs/elasticsearch'; @Injectable() export class SearchService { constructor(private readonly elasticsearchService: ElasticsearchService) {} async search(query: string) { const { body } = await this.elasticsearchService.search({ index: 'my_index', body: { query: { match: { title: query, }, }, }, }); return body.hits.hits; } } ``` 以上代码中,我们定义了一个 SearchService,它注入了 ElasticsearchService,并提供了一个 search 方法,用于搜索数据。在 search 方法中,我们使用 ElasticsearchService 的 search 方法,传入查询条件,即可进行搜索操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

js胡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值