nestJs学习笔记一

856 阅读2分钟

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>

运行结果: