Web后端开发技术
单体架构
客户端 <=> 服务器
分布式架构
客户端 <=> 代理 <=> 多个服务器
微服务架构
客户端 <=> 应用网关 <=> 服务(一个服务器上部署了多个服务实例)
电商在购物旺季和淡季动态调整服务部署数量
- 服务注册中心:实现服务和服务之间的通讯
例子:销量的统计和库存统计的服务需要通讯
Serverless 架构
微信小程序
客户端 <=> 云端应用 <=> 多个云端应用
无法感知具体的服务节点,托管到云端
Node.js
- Node是什么?
- 运行的环境
- 代码是如何运行的?
- JavaScript代码 -> Node运行时环境/浏览器的开发者工具 (JavaScript引擎 V8) -> 汇编代码
- Node.js可以实现跨平台
借助midway实现后端代码库的构建
后端代码库没有html,css文件
tsconfig.json: typescript 对于类型的约束
- 因为JavaScript为弱类型语言
- 编写typescript语言,实际编译为JavaScript语言
typescript: 有类型的JavaScript
TypeScript数据类型
- number, boolean, string
number[]
,Array<number>
- any
- interface, union…
let a: number;
TypeScript Class
1
2
3
4
5
6
7
8
9
10
11
12
13class A{
name: string;
description: string;
constructor(name: string, descripting: string){
this.name = name;
this.description = description;
}
public getName(): string{
return this.name;
}
}TypeScript函数,会定义参数和返回值的类型
1
2
3function f1(param_1: number, param_2: number): string {
return 'Hello';
}
async 函数 vs. 同步函数
异步函数返回的是一个未来某一个时刻执行完成的结果
返回值一定要是Promise
如果没有async也可以返回Promise (Promise本质就是一种数据类型) 相当于一个同步函数返回了一个异步的结果
1 | async home(): Promise<object> { |
Promise的使用
new Promise((resolve,reject)=>{})
- resolve() 表示操作成功的结果
- reject() 表示操作失败的结果
1
2
3
4
5
6
7
8async function minus (a: number, b:number): Promise<Number> {
return a-b;
}
let b= minus(3,4); //b的类型是Promis<number>
let c= await minus(3,4); //c得到了返回值,可以用await和then()得到
console.log(b,c); //
后端代码结构
client <=> controller(控制器) <=> service(服务)
- client发出http request
- controller返回http response
Controller具体实现
负责接收和响应外部请求,第一个接触客户端请求
Service具体实现
控制反转和依赖注入:@Provide
创建一个服务示例@Inject
controller获得这个服务示例
通过注解实现每个服务示例只new一次
敏捷看板中如何任务新建
见ppt
文件上传
见ppt
高阶函数
以回调函数为参数的函数
- 回调函数: 箭头那样的函数
Postman
没有前端时如何去验证后端服务是否成功