1、第一步,通过脚手架安装创建项目
-
全局安装脚手架:npm i -g @nestjs/cli
-
创建项目架构:nest new 项目名称
-
运行项目(热更新):npm start:dev
2、第二步,创建模块化(MVC)
- 创建模块的命令
创建Service:nest g service [文件名][文件目录] // src目录下
创建Controller :nest g controller [文件名][文件目录] // src目录下
创建Module:nest g module [文件名][文件目录] // src目录下
- 模块联系解释
Controller:控制器,提供 api 接口
Service:定义数据,如数据库的增删改查
Module:连接Controller跟Service
- 模块具体举例(以判断输入的账号密码是否正确和 获取用户信息为例)
user.service.ts
import { Injectable } from '@nestjs/common';
interface user { // 创建数组类型user
name: string,
password: string,
age: string,
classes: string,
}
@Injectable() // 声明可被注入实例化,与controller中的constructor 同时使用
export class UserService {
/*
* 模拟数据数组返回
*/
getData(): user[] {
return [
{ name: '张1', password: '12345', age: '18', classes: '计算机科学与技术1班' },
{ name: '张2', password: '23456', age: '18', classes: '计算机科学与技术2班' },
{ name: '张3', password: '34567', age: '18', classes: '计算机科学与技术3班' },
{ name: '张4', password: '45678', age: '18', classes: '计算机科学与技术4班' }
]
}
/*
* 判断是否存在用户
*/
userIsExist(name: string, password: string): string {
let data: user[] = this.getData()
let flag: Boolean = false
data.forEach((item: user) => {
if (name === item.name && password === item.password) {
flag = true
}
})
return flag ? '查询成功' : '账号或密码错误';
}
/*
* 获取用户信息
*/
getUserData(name: string): user {
let data: user[] = this.getData()
let res: user
data.forEach((item: user) => {
if (name === item.name) {
res = item
}
})
return res;
}
}
user.controller.ts
import { Controller, Post, Get, Body, Query } from '@nestjs/common';
import { UserService } from './user.service';
@Controller('user')
export class UserController {
// 引入依赖类
constructor(private readonly UserService: UserService) {}
// 定义post请求
@Post('userIsExist')
userIsExist(@Body() body: any) {
return this.UserService.userIsExist(body.name, body.password);
}
// 定义get请求
@Get('getUserData')
getUserData(@Query() query: any) {
return this.UserService.getUserData(query.name);
}
}
user.module.ts
import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';
@Module({
controllers: [UserController],
providers: [UserService],
exports: [UserService]
})
export class UserModule {}
app.module.ts
import { UserModule } from './logical/user/user.module';
@Module({
imports: [UserModule],
controllers: [AppController],
providers: [AppService]
})
export class AppModule {}
main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.setGlobalPrefix('nodeApi'); // 全局api前缀
await app.listen(3000);
}
bootstrap();
3、疑问
数组的定义除了any 还有什么方法呢?
查了ts定义的资料, 可以使用interface 来解决
interface user {
name: string;
password: string;
}
数组:let list: user[]
对象:let list: user
4、附上前端vue请求代码(使用了axios请求)
<template>
<div id="app">
{{ myData }}
</div>
</template>
<script>
export default {
data () {
return {
myData: ''
}
},
created () {
this.getData()
},
methods: {
getData () {
this.axios.post('/nodeApi/user/userIsExist', {
name: '张1',
password: '12345'
}).then((res) => {
alert(res.data)
})
this.axios.get('/nodeApi/user/getUserData', {
params: { name: '张1' }
}).then((res) => {
this.myData = res.data
})
}
}
}
</script>
<style lang="less"></style>
运行结果: