一.服务端基本三层解构
1.1 路由层也叫表现层:
搭建服务器,编写静态私服接口都应该写在路由层Router目录文件夹下
1.2 服务层:
编写DAO中的各表的增删改查功能
1.3DAO层:
主要完成建库建表建字段的功能
如果想知道如何利用sequelize联动mysql完成建库建表建字段 请看我上一篇博客
二.node中Router层的实现 - express框架
1.下载:
在vscode中下载
npm i express
2.使用
express使用需要了解中间件的概念,这里简单说明一下
2.1中间件
理解:中间件实质上就是一个个封装好的函数。
中间件的处理过程
1.当匹配到了请求
2.交给第一个处理函数处理
3.函数中需要手动next()的交给后续中间件处理
处理细节
1.如果后续已经没有了中间件
express发现如果响应没有结束,express会响应404
2.如果中间件发生了错误
不会停止服务器
相当于调用了 next(错误对象)
寻找后续的错误处理中间件,如果没有,则响应500
3.响应结束,处理函数任然要继续往下执行,只要有next方法,但end只会有一个
不太理解的小伙伴,咱们直接看实例
3.实例
3.1 搭建服务器和静态私服的实现
//将下载好的express模块导入
const express = require("express");
//node内置的path模块导入
const path= require("path");
// 调用express函数,内部会自动创建网站服务器,并提供一系列API函数方法
const app = express();
const path = require("path");
//监听服务端 第一个参数是定义服务器的端口
app.listen("3000", () => {
console.log("开启服务端");
});
// express.urlencoded,express.json,都是内置处理参数的中间件函数
app.use(express.urlencoded());
app.use(express.json());
//将需要加载的静态资源的总目录转换成绝对路径
const public = path.resolve(__dirname, "../public");
//静态私服
app.use(express.static(public));
//API接口
//路由中间件express.Router()写在api文件夹中
//用户
app.use("/api/admin", require("./api/admin"));
express插件已经帮我们把静态私服做好了,所有只需要调用express.static()这个中间件即可
use这个方法是表示,不管是什么方法都可以进入到这个函数中
最后来看一下一个比较简单易懂什么是中间件的例子
//将下载好的express模块导入
const express = require("express");
//node内置的path模块导入
const path= require("path");
// 调用express函数,内部会自动创建网站服务器,并提供一系列API函数方法
const app = express();
//这个app就是可以理解为是一个复杂对象,内置了很多方法
//第一个参数是路径接口,第二个参数本质是一个函数,在express中定义为中间件
//这个中间件有很多参数不止下面三个,
//req是前端请求,res是后端响应,我们重点来讲一下这个next,它是中间件的灵魂导师
//如果有next并且事情没有处理完,没有给前端返回响应那么next会指向下一个中间件直到后端返回一个响应
app.post("/news", (req, res, next) => {
console.log("body", req.body);
next()
});
app.post("/news", (req, res, next) => {
console.log("body", req.body);
res.end("123")
next()
});