[VueJsDev] 其他知识 - NestJS 学习内容
[VueJsDev] 目录列表
https://www.cnblogs.com/pengchenggang/p/17037320.html
NestJS 学习内容
NestJS 学习总结
Step. 1: 全局安装包
pnpm add -g @nestjs/cli nodemon ts-node
nest new nestjs-api
Step. 2: 安装相关依赖
pnpm add prisma-binding @prisma/client mockjs @nestjs/config class-validator class-transformer argon2 @nestjs/passport passport passport-local @nestjs/jwt passport-jwt lodash multer dayjs express redis @nestjs/throttler
pnpm add -D prisma typescript @types/node @types/mockjs @nestjs/mapped-types @types/passport-local @types/passport-jwt @types/express @types/lodash @types/multer @types/node
Step. 3: prettierrc 配置文件
{
"arrowParens": "always",
"bracketSameLine": true,
"bracketSpacing": true,
"embeddedLanguageFormatting": "auto",
"htmlWhitespaceSensitivity": "css",
"insertPragma": false,
"jsxSingleQuote": false,
"printWidth": 120,
"proseWrap": "never",
"quoteProps": "as-needed",
"requirePragma": false,
"semi": false,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "all",
"useTabs": false,
"vueIndentScriptAndStyle": false,
"singleAttributePerLine": false
}
Step. 4: package.json 修改
-"start:dev": "nest start --watch",
+"dev": "nest start --watch",
- 这样就能用快捷命令
d
http://localhost:3000
Step. 5: nest-cli.json 修改
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"generateOptions": {
"spec": false
}
}
- 使用命令
nest g res article
- 或者用简写
n g res article
(需配置快捷命令) http://localhost:3000/article
- 一个新接口就写好了 rest 方式
Step. 6: 数据库连接
npx prisma init
- 会创建
.env
文件与prisma
文件夹
.env
修改数据库连接
DATABASE_URL="mysql://root:admin888@127.0.0.1:3306/nest"
Step. 7: 定义数据库结构
npx prisma db pull
这条命令可以按照数据库生成schema.prisma文件- 下面我们按照写配置文件 生成数据的方式进行
prisman/schema.prisma
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql" // 这里改成mysql了
url = env("DATABASE_URL")
}
model article {
id Int @id @default(autoincrement()) @db.UnsignedInt()
title String
content String @db.Text()
}
- prisma 插件记得装一下,就有颜色提示了
Step. 8: 生成迁移
npx prisma migrate dev
- 根据定义生成迁移文件
- 执行新的迁移文件修改数据表
- 生成 Prisma Client
Step. 9: 重置数据库
npx prisma migrate reset
- 删除数据库
- 创建同名数据库
- 执行所有迁移文件
- 运行 seed 数据填充
Step. 10: 数据填充
首先在package.json中定义命令,后面可以调用
npx prisma db seed
命令实现填充
{
"name": "nest",
...
"prisma": {
"seed": "ts-node prisma/seed.ts"
},
"scripts": {
...
}
}
- 新建
prisma/seed.ts
import { PrismaClient } from '@prisma/client'
import { Random } from 'mockjs'
const prisma = new PrismaClient()
async function run() {
for (let i = 1; i <= 5; i++) {
await prisma.article.create({
data: {
title: Random.ctitle(3, 6),
content:Random.cparagraph(30, 50),
},
})
}
}
run()
- 执行
npx prisma db seed
填充数据
Step. 11: eslint 一个内联报错
Delete
␍
eslintprettier/prettier
- 原因就是 win/apple/linux 系统的回车 有的是
\r
有的是\n
有的是\n\r
导致的 - 解决方案
// .eslintrc.js
rules: {
"endOfLine":"auto",
},
- ctrl+shift+P reload 一下即可
- Delete
␍
eslintprettier/prettier - 解决VSCode Delete
␍
eslint(prettier/prettier)错误 - Delete
␍
eslint(prettier/prettier) 错误的解决方案
Step. 12: 添加prisma数据库读取工具包
全局的一个数据库读取工具包
n g mo prisma
n g s prisma
- 代码
// src/prisma/prisma.module.ts
import { Global, Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';
@Global()
@Module({
providers: [PrismaService],
exports: [PrismaService],
})
export class PrismaModule {}
- 代码
// src/prisma/prisma.service.ts
import { PrismaClient } from '@prisma/client';
import { Injectable } from '@nestjs/common';
@Injectable()
export class PrismaService extends PrismaClient {
constructor() {
super({
log: ['query'],
});
}
}
Step. 12: 添加 DTO 数据格式
ts 最大的特点就是要有type,所以对于article来说,就要有它对应的DTO
- 数据传输对象(DTO)(Data Transfer Object),这个就是入参的类型
- model 就是数据模型,对应数据库字段 大概这意思
// src\article\dto\create-article.dto.ts
export class CreateArticleDto {
title: string
content: string
}
- 验证一般都放在DTO这里进行验证
Step. 13: 添加控制器-路由设置
先在控制器添加上路由先能访问
import { Body, Controller, Delete, Get, Param, Patch, Post } from '@nestjs/common'
import { ArticleService } from './article.service'
import { CreateArticleDto } from './dto/create-article.dto'
import { UpdateArticleDto } from './dto/update-article.dto'
@Controller('article')
export class ArticleController {
constructor(private readonly articleService: ArticleService) {}
@Post()
create(@Body() createArticleDto: CreateArticleDto) {
return this.articleService.create(createArticleDto)
}
// @Post('findAll')
@Get('findAll')
findAll() {
return this.articleService.findAll()
}
@Post('findOne')
findOne(@Body() dto: UpdateArticleDto) {
console.info('findOne dto', dto)
return this.articleService.findOne(dto)
}
}
Step. 14: 添加控制器的服务Servce
控制器调用服务,服务里面写相关数据的内容
import { Injectable } from '@nestjs/common'
import { PrismaService } from 'src/prisma/prisma.service'
import { CreateArticleDto } from './dto/create-article.dto'
import { UpdateArticleDto } from './dto/update-article.dto'
@Injectable()
export class ArticleService {
constructor(private prisma: PrismaService) {}
create(createArticleDto: CreateArticleDto) {
return 'This action adds a new article'
}
// findAll() {
// return `This action returns all article`
// }
async findAll() {
const articles = await this.prisma.article.findMany()
return {
data: articles,
}
}
async findOne(dto: UpdateArticleDto) {
// return `This action returns a #${dto.id} article`
const article = await this.prisma.article.findMany({
where: {
id: +dto.id,
}
})
return {
data: article
}
}
}
...
[VueJsDev] 其他知识 - NestJS 学习内容的更多相关文章
- web前端开发学习内容
应该 具备的 知识技能 :懂web标准,熟练手写 xhtml css3 并符合 符合w3c标准 代码能 兼容主流浏览器.ie6.7.8.9 ff 等. ...
- html/css 盒子布局 Margin 、Padding 、border 以及 清除浮动的知识 (学习HTML过程中的小记录)
html/css 盒子布局 Margin .Padding .border 以及 清除浮动的知识 (学习HTML过程中的小记录) 作者:王可利(Star·星星) width 是"宽 ...
- 2.Freshman阶段学习内容的确定
我刷知乎.在知乎上答题的程序员,不是很牛逼就是更牛逼,说起各种系统.各种系统的各种版本.各种语言.数据库.算法.IT届的各种圣战都有板有眼.信手拈来.头头是道,不得不服.这导致了一些非常严重的问题:我 ...
- 第一天上午——HTML网页基础知识以及相关内容
今天上午学习了HTML基础知识以及相关内容,还有DW的基本使用方法. HTML(HyperText Markup Language):超文本标记语言,超文本:网页中除了包含文本文字之外,还包含了图片, ...
- JAVA第十周《网络编程》学习内容总结
JAVA第十周<网络编程>学习内容总结 学习内容总结 1.初听到网络编程四个字可能会觉得很困难,实际上网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据,把数据发送到指定的位置, ...
- # 20145118 《Java程序设计》第4周学习总结 ## 教材学习内容总结
20145118 <Java程序设计>第4周学习总结 教材学习内容总结 本周内容为教材第六.七两张内容. 重点概念: 1.面向对象中,子类继承父类,避免重复的行为定义,是一种简化操作. 2 ...
- 20155328 2016-2017-2 《Java程序设计》 第十周学习内容总结
20155328 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 JAVA和ANDROID开发学习指南 第22章 网络概览 两台计算机用于通信的语言叫做&qu ...
- 3.Freshman阶段学习内容的确定
我刷知乎.在知乎上答题的程序员,不是很牛逼就是更牛逼,说起各种系统.各种系统的各种版本.各种语言.数据库.算法.IT届的各种圣战都有板有眼.信手拈来.头头是道,不得不服.这导致了一些非常严重的问题:我 ...
- STM32学习内容和计划
一.STM32学习内容(流程) 1.学习STM32开发流程 ①MDK使用.建立工程.调试等 ②库开发方法 2.学习STM32常用外设开发 ①GPIO ②中断 ③定时器 ④串口 ⑤CAN 3.学习STM ...
- u-boot代码学习内容
前言 u-boot代码庞大,不可能全部细读,只能有选择的读部分代码.在读代码之前,根据韦东山教材,关于代码学习内容和深度做以下预先划定. 一.Makefile.mkconfig.config.mk等 ...
随机推荐
- SqlSugar更新数据
1.根据实体对象更新 所谓按实体对象更新就是:db.Updateable(参数对象) 有参数的重载 db.Updateable(实体或者集合).ExecuteCommand() //右标题1 下面的所 ...
- GPTs prompts灵感库:创意无限,专业级创作指南,打造吸睛之作的秘诀
GPTs prompts灵感库:创意无限,专业级创作指南,打造吸睛之作的秘诀 优质prompt展示 1.1 极简翻译 中英文转换 你是一个极简翻译工具,请在对话中遵循以下规则: - Prohibit ...
- VRAR概念的定义和要素以及技术定义和应用
1.概念 一.三个概念的定义和要素. 1.VR,Virtual Reality,虚拟现实 是一种通过计算机模拟真实感的图像,声音和其他感觉,从而复制出一个真实或者假想的场景,并且让人觉得身处这个场景之 ...
- Flask Paginate实现表格分页
flask_paginate 是 Flask 框架的一个分页扩展,用于处理分页相关的功能.它可以帮助你在 Flask Web 应用程序中实现分页功能,让用户可以浏览大量数据的不同部分.本篇博文重点讲述 ...
- Postfix + Extmail 企业邮件服务器搭建
ExtMail套件用于提供从浏览器中登录.使用邮件系统的Web操作界面,而Extman套件用于提供从浏览器中管理邮件系统的Web操作界面.它以GPL版权释出,设计初衷是希望设计一个适应当前高速发展的I ...
- 【scikit-learn基础】--『分类模型评估』之系数分析
前面两篇介绍了分类模型评估的两类方法,准确率分析和损失分析,本篇介绍的杰卡德相似系数和马修斯相关系数为我们提供了不同的角度来观察模型的性能,尤其在不平衡数据场景中,它们更能体现出其独特的价值. 接下来 ...
- 【OpenVINO™】在 Windows 上使用 OpenVINO™ C# API 部署 Yolov8-obb 实现任意方向的目标检测
前言 Ultralytics YOLOv8 基于深度学习和计算机视觉领域的尖端技术,在速度和准确性方面具有无与伦比的性能.其流线型设计使其适用于各种应用,并可轻松适应从边缘设备到云 API 等不同硬 ...
- 使用C语言构建一个独立栈协程和共享栈协程的任务调度系统
使用了标准库头文件 <setjmp.h>中的 setjmp 和 longjmp两个函数,构建了一个简单的查询式协作多任务系统,支持独立栈和共享栈两种任务. 其中涉及到获取和设置栈的地址操作 ...
- 资深工程师 VSCode C/C++ 必备开发插件
1.前言 俗话说"工欲善其事,必先利其器",下面介绍几个VSCode提高开发效率的插件,资深工程师必备. 2.基础插件 2.1.Chinese(Simplified) vscode ...
- DBGrideh使用小结【EditorMode】当用户点击单元格的时候,自动进入编辑状态
(1)控制一个单元格是否允许编辑(或者说文字选中),可以设置Grid的Options的dgEditing属性:如果该属性为False,那么用户只能选中该单元格而无法选中里面的内容,也无法进行编辑.(2 ...