这篇文章主要记录了一个简单的增删改查应用,涉及到了MongoDB,Swagger, 以及以express为底层的Nest.js框架。
简单介绍一下用到的工具,swagger就不用说了,MongoDB同样使用docker容器和mongo express进行图形化操作,Nest.js在入门篇我已经详细介绍过了,目前气势如火如荼。
在官方文档中Nest.js推荐连接MongoDB的是:
$ npm install --save mongoose
$ npm install --save-dev @types/mongoose
使用这个方法的话,在创建schema时,官方例子如下:
import * as mongoose from 'mongoose';
export const CatSchema = new mongoose.Schema({
name: String,
age: Number,
breed: String,
});
String等写法是mongoose中的写法,而不是typescript的内容,下面推荐到这款插件typegoose使用类定义模板,对typescript的支持也做的更好:
npm i -s @typegoose/typegoose mongoose
npm i @types/mongoose
最后是用来模板认证的类验证器:
$ npm i --save class-validator class-transformer
下面拿demo代码来介绍一下:
/*
* @Date: 2019-09-30 14:33:53
* @LastEditors: Asen Wang
* @LastEditTime: 2019-09-30 22:42:48
* @content: I
*/
import {getModelForClass, prop} from '@typegoose/typegoose'
export class Post {
@prop()
title: string
@prop()
article: string
@prop()
content: string
}
export const PostModel = getModelForClass(Post)
首先这里使用到了三个属性,分别用prop装饰,最后生成文章模型"PostModel"并导出。
import { Body, Controller, Delete, Get, Param, Post, Put } from '@nestjs/common';
import { ApiOperation, ApiUseTags } from '@nestjs/swagger';
import { CreatePostsDto } from './dto';
import { PostModel } from './post.model';
@Controller('posts')
@ApiUseTags('文章网站')
export class PostsController {
@Get()
@ApiOperation({ title: '显示文章列表页面' })
async index() {
return await PostModel.find()
}
...
在这里,我们引入了创建好的模型,使用起来也很简单,demo所示PostModel.find()就可以输出所有得到的数据。
结合我们入门篇里面的swagger的动态展示的方法,我们可以很简单的操作,比如你可以在数据库中增加一个数据,然后在swagger里面使用get方法得到结果:
nest.js的优势有很多,比如不用像Flask考虑各种各样的工程结构,蓝图等概念,也方便与swagger进行结合,使用的也是ES6推荐的import/export,而不是require的方法。
下一节我们实现用户验证的接口。