今天docker遇到了一直打不开的问题,一直报error,win版本不对,后来折腾到半夜才解决,看这篇文章,里面还有对WIN10家庭版怎么运行docker的描述。

回到正题,今天要分享的是今年Node.js势头最猛框架Nest.js。

前面我们也介绍过一些小而美的框架,准确的说他们并不算是框架,只是实现HTTP的封装库而已,但是他们围绕自身的完善的生态让他们有了媲美框架的功能性和灵活敏捷的特性,从这个角度看,Flask,Koa,Express都是属于这个范畴。

我之前说过,我很喜欢Flask的设计,因为有一种自己掌握的感觉,但是我也很喜欢Nuxt.js的设计,因为封装了SSR,其脚手架更是封装了很多我们一定会使用的东西,还有类似你可以自己选择后端框架的权力。而我选择Nest.js和Nuxt的初衷有些相似,最重要的一点是我看中了nest里面封装了swagger ,以很方便的生成接口文档,并且是动态文档,非常好用!

同时next默认的HTTP库使用的是express,虽然我很想知道为什么不用koa,但是也无所谓,毕竟async等方法都有。第二点就是nest是用TS写的,同志们,据本博客上一次提TS已经过了快两个月了!你还记得TS是啥吗。。。

第三点就是nest给我一种和flask很像的感觉,一样的到处充满了装饰器,一样的丰富的 cli功能,甚至nest比flask的命令还要丰富。

冲着这么方便的特性,毫无疑问这是我未来一个月构建一个稍微中型一点的项目的不二选择。

简单说一下安装:

$ npm i -g @nestjs/cli
$ nest new project-name

全局安装并且使用nest new创建新项目,就和vue create一样吧。

因为TS和vscode集成的非常好,所有很多人都是推荐使用vscode去写nest的,我个人因为更喜欢webstorm所以还是用webstorm做的,当然除非你和我一样有病,不然还是用vscode吧!

脚手架搭建的工程大致结构如图,熟悉的package.json就不说了,这里他会生成自动的test文件夹,存放测试代码,我们也可以先不看,主要还是src目录下面的文件。

首先是main.ts:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';async function bootstrap() {const app = await NestFactory.create(AppModule);await app.listen(3000);
}
bootstrap();

没有发现我们久违的ts语法,很好理解,nestfactory是用来创建应用实例的,然后监听3000端口,等待入栈的HTTP请求。关于底层的HTTP框架,nest并没有说非得用哪一个,理论是他是可以用任何一个的,但是nest封装好的可以开箱即用的只有express和fastify,以便于我们去利用这两个框架带来的丰富的生态。

然后我们先运行一下:

$ npm run start

在本地的3000我们会看到hello world。怎么得到的呢?我们来看一下service和controller中的文件:

import { Injectable } from '@nestjs/common';@Injectable()
export class AppService {getHello(): string {return 'Hello World!';}
}
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';@Controller()
export class AppController {constructor(private readonly appService: AppService) {}@Get()getHello(): string {return this.appService.getHello();}
}

终于看到我们熟悉的ts语法了,意外惊喜还有!熟悉的装饰器,仔细想想没写flask的日子仿佛不比ts少多少。没学过的话可能写会难一点,这种类似于大范围使用装饰器的方式,所以大家从flask转node的话,nest也是非常容易上手的框架。

最后一个文件就是module了:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';@Module({imports: [],controllers: [AppController],providers: [AppService],
})
export class AppModule {}

说实话这个没怎么接触过angular的人还是会看的一脸懵逼的,比如我,但是大致意思还是了解的,因为nest宗旨是模块化,因此可以把这个文件堪称个根目录,去调用controller,然后controller里面再注入service,再去调用service。

先讲到这里,下一章讲一下我最喜欢的swagger文档生成和丰富的命令行工具!这是我非常喜欢nest的两个地方。

Nest.js 入门相关推荐

  1. nest.js入门一

    前提条件 学习者需要有一定node.js,typescript基础.这里就不从安装node.js开始,请自行到https://nodejs.org/zh-cn/下载安装.不熟悉typescript的哥 ...

  2. 学完这篇 Nest.js 实战,还没入门的来锤我!(长文预警)

    大厂技术  高级前端  Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 前言 最近一直比较忙, 而且自己工作中做的事也不适合写文章,所以一直没有更文.. 最近接到一 ...

  3. js return 后 运行 另_新手入门Nest.js(六) 控制器Resources、路由通配符

    点击上方公众号,可快速关注 作者:鲲鹏友人原文链接:https://www.gowhich.com/blog/1067 Nest.js控制中的Resources 前面介绍了路由中如何通过GET方式访问 ...

  4. js 加入debug后可以进入controller_新手入门Nest.js(四) 控制器路由

    点击上方公众号,可快速关注 作者:鲲鹏友人原文链接:https://www.gowhich.com/blog/1065 一个控制器的目的是接收来自应用的一个请求 路由机制控制了控制器接收哪个请求 通常 ...

  5. Nest.js 从零到壹系列(六):用 15 行代码实现 RBAC 0

    本文由图雀社区认证作者 布拉德特皮 写作而成,点击阅读原文查看作者掘金链接,感谢作者的优质输出,让我们的技术世界变得更加美好???? 上一篇介绍了如何使用 DTO 和管道对入参进行验证,接下来介绍一下 ...

  6. 【好文翻译】Difference Between Next.js vs. Nuxt.js vs. Nest.js

    Difference Between Next.js vs. Nuxt.js vs. Nest.js 编程可以被认为是创造一些令人惊奇和信息事物的过程.如果你是一个程序员,你必须同每项新兴前沿技术保持 ...

  7. js模板字符串自定义类名_【Vue.js 入门到实战教程】07Vue 组件注册 | 基本使用和组件嵌套...

    来源 | https://xueyuanjun.com/post/21929除了前面介绍的基本语法之外,Vue.js 还支持通过组件构建复杂的功能模块,组件可以称得上是 Vue.js 的灵魂,是 Vu ...

  8. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  9. Ember.js入门教程、博文汇总

    第一章 对象模型 Ember.js 入门指南--类的定义.初始化.继承 Ember.js 入门指南--类的扩展(reopen) Ember.js 入门指南--计算属性(compute properti ...

最新文章

  1. 500多页的机器学习入门笔记,下载超5万次,背后都有什么故事?
  2. Pygame介绍以及下载
  3. Scala高阶函数详解
  4. 主流手机分辨率 尺寸 操作系统
  5. 88. 合并两个有序数组 golang
  6. html播放切片,[Html/Css]网页切片
  7. matlab2c使用c++实现matlab函数系列教程-sin函数
  8. python医疗_利用Python实现医疗在线问答机器人
  9. Sublime 美化 SQL代码:SqlBeautifier
  10. 解决Windows11能登录QQ微信,但不可以使用浏览器上网
  11. 纯CSS3绘制的小猫笑脸动画
  12. 中国AI公司会议室取名简史
  13. C++ 类成员函数的函数指针
  14. Layui 表单设计器
  15. mysql too long_mysql中data too long for column错误的一种解决办法
  16. 深度学习基础笔记——前向传播与反向传播
  17. MonoDevelop花括号(大括号)自动补全
  18. 四月英语——你是人间四月天
  19. 今天发布视频博主同事制作北极视频第二集-无人机和北极熊
  20. C 喵帕斯之天才算数少女 SDUT

热门文章

  1. 微信聊天记录怎么导出?
  2. 手把手教你用C语言制作炫酷烟花代码!
  3. CentOS 8.x 安装JDK 1.8.x
  4. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stric
  5. 2023年国际高级数据挖掘与应用会议(ADMA 2023)
  6. sendRedirect()与foward
  7. HorizontalScrollView 详解
  8. 2.react心智模型(来来来,让大脑有react思维吧)
  9. 高边驱动TMI6240芯片应用在数字机顶盒和监视器上
  10. 无线智能插座Arduino开发工具下载安装教程二