CSDN话题挑战赛第2期
参赛话题:学习笔记
???? 前言
NodeJS
的基础内容已经完结,现在开始要步入框架的学习了,本篇文章将初步去探索express
这个框架,让我们开始吧!
1️⃣ express介绍
Express是基于 Node.js
平台,快速、开放、极简的 Web
开发框架。
-
Web 应用程序
Express
是一个保持最小规模的灵活的Node.js
Web
应用程序开发框架,为Web
和移动应用程序提供一组强大的功能。 -
API
使用您所选择的各种HTTP
实用工具和中间件,快速方便地创建强大的API
。 -
性能
Express
提供精简的基本Web
应用程序功能,而不会隐藏您了解和青睐的Node.js
功能。 -
框架
许多 流行的开发框架 都基于Express
构建。
2️⃣ 初步上手
安装:npm i express
express
为我们提供的最强大的能力就是一套超级简单且强大的路由系统,我们先看一下使用原生NodeJS
开发服务器的代码:
const http = require("http");
const server = http.createServer();
server.on("request", (req, res) => {
// req:接受浏览器传的参数,request对象
// res:返回渲染的内容,response对象
// 路由匹配
switch (req.url) {
case "/":
res.end(
JSON.stringify({
name: "ailjx",
age: 18,
})
);
break;
default:
res.end("404");
break;
}
});
server.listen(3000, () => {
console.log("服务器启动成功!");
});
上面我们使用原生NodeJS
开发了一个简单的后端服务器,可以想象到,使用原生NodeJS
开发最麻烦的问题就是对路由的处理了
- 需要手动使用分支去匹配用户请求的路由
- 在返回数据时需要自己手动转换数据格式
- 对于一些网络请求,如
GET
、POST
请求等,需要我们针对不同的请求去做不同的适配 - 开发出的
API
代码结构不够清晰,相对繁琐
了解了原生开发的问题所在,我们现在尝试使用express
去搭建一个与上面一样的服务器:
// 引入express
const express = require("express");
const app = express();
// 注册路由(get请求)
app.get("/", (req, res) => {
// req:接受浏览器传的参数,request对象
// res:返回渲染的内容,response对象
res.end(
JSON.stringify({
name: "ailjx",
age: 18,
})
);
});
// 注册全局中间件,上面的路由都没有匹配时会进入到这里
app.use((req, res) => {
res.end("404");
});
app.listen(3000, () => {
console.log("服务器启动成功!");
});
我们使用express
时能直接根据路由—>处理函数
的方式去注册一个个路由,express
路由处理函数中的req
和res
参数完全兼容原生NodeJS
的req
和res
参数,并且在其基础上还添加了额外的方法:
app.get("/", (req, res) => {
// express中的req和res完全与原生的兼容,原生的write和end等方法都能使用
res.write("hello world");
res.end();
});
res.send
是express
中新添加的方法,send
方法很聪明,它会自动识别/转换数据的格式从而自动设置响应头,不需要我们手动调用res.writeHead
设置响应头:
app.get("/", (req, res) => {
// express中的req和res完全与原生的兼容,并在原生的基础上添加了格外的属性
res.send("hello world");
});
app.get("/", (req, res) => {
// express中的req和res完全与原生的兼容,并在原生的基础上添加了格外的属性
// 1. 直接传递数据,send会自动JSON化我们的数据
res.send({
name: "ailjx",
age: 18,
});
// res.send([1, 2, 3]);
});
app.get("/", (req, res) => {
// 2. 直接传递HTML文档,send会自动帮我们处理响应头和编码格式
res.send(`<h1>你好呀!</h1>`);
});
express
路由的另一个强大之处在于它可以设置模糊匹配:
// 匹配 acd 和 abcd
app.get('/ab?cd', function(req, res) {
res.send('ab?cd');
});
// 匹配 /ab/******
app.get('/ab/:id', function(req, res) {
res.send('aaaaaaa');
});
// 等等...
还可以设置请求类型:
app.post("/login", (req, res) => {
res.send("登录成功!");
});
app.delete("/login", (req, res) => {
res.send("删除成功!");
});
app.put("/login", (req, res) => {
res.send("修改成功!");
});
上面简单介绍了
express
的部分特性,关于express
的更多更详细的内容博主会持续更新
从上面的几个例子你应该就能看到express
路由的优势所在,在express
中还有一个非常重要的概念:中间件
3️⃣ 中间件
Express
是一个自身功能极简,完全是由路由和中间件构成一个的 web
开发框架:从本质上来说,一个 Express应用就是在调用各种中间件。
简单来说中间件(Middleware
) 就是一个函数,它可以访问请求对象(request object (req
)), 响应对象(response object (res
)), 和 web
应用中处于请求-响应
循环流程中的中间件,一般被命名为 next
的变量。
function (req, res, next) {
// 三个参数:req, res, next
console.log('我是一个中间件')
next()
}
中间件的功能包括:
- 执行任何代码。
- 修改请求和响应对象。
- 终结请求-响应循环。
- 调用堆栈中的下一个中间件。
如果当前中间件没有终结请求-响应循环,则必须调用 next()
方法将控制权交给下一个中间件,否则请求就会挂起。
上面我们在app
上挂载的路由处理函数就类似于中间件,关于express
中间件的更多内容我会在之后的文章里详细讲解,敬请期待!
???? 结语
本篇在原生Node
开发的问题上引入了express
这个框架,并简单对express
的使用进行了讲解,博主的Node.js从入门到精通专栏正在持续更新中,关注博主订阅专栏学习Node
不迷路!
如果本篇文章对你有所帮助,还请客官一件四连!❤️