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
去搭建一个与上面一样的服务器:
// 引入expressconst 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
不迷路!
如果本篇文章对你有所帮助,还请客官一件四连!❤️
版权归原作者 海底烧烤店ai 所有, 如有侵权,请联系我们删除。