持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情
“金秋十月,我要连续30天更文,做劳模,拿手机摄影神器!点击查看活动详情 “即可成功参与
Express介绍
基于node.js平台,快速、开放、极简的web开发框架
通俗的理解:Express的作用和node.js内置的http模块类似,是专门用来创建web服务器的
Express本质:是一个npm第三方包,提供了快速创建web服务器的便捷方法
express提供了中间件功能
能做什么,对于前端来说最常见的两种服务器:
- web网站服务器:专门对外提供web网页资源的服务器
- API接口服务器:专门对外提供API接口的服务
创建基本服务器
//导入Express
const express=require('express')
//创建web服务器
const app=express()
//监听请求并处理:
app.get('GET请求的地址', 处理函数);
app.post('POST请求的地址', 处理函数);
//启动服务器
调用app.listen(端口号,启动成功后的回调函数)
把内容响应给客户端
通过 res.send()方法,可以把处理好的内容,发送给客户端
get请求响应:
app.get('/api/getbooks', (req, res) => {
res.send({ status: 0, message: '成功' })
})
post请求响应:
app.post('/api/getbooks', (req, res) => {
res.send({ status: 0, message: '成功' });
})
如果响应JS对象,send方法会自动将对象转成JSON格式
send会根据响应体,自动设置 Content-Type 响应头
res.end()方法:只能发送字符串,且默认没有设置头信息,是原生http自带的方法
res.send()方法:能发送字符串和对象,并且自动设置头信息,是express封装之后的方法
获取请求URL地址中的参数
获取URL中携带的字符串参数
当用户在URL中,采用字符串的形式(/books?name=‘123’&age=12)发送参数时,我们可以通过req.query对象可以访问到客户端通过字符串的形式,发送到服务器的参数
app.get('/api/getbooks', (req, res) => {
req.query //默认是一个空对象,如果传的参数为字符串格式,则里面存储参数对象
})
获取URL中携带的:动态参数
当用户在URL中,采用:的形式(/books/:id)发送参数时,我们可以通过req.params对象,可以访问到URL中,通过:匹配到的动态参数
app.get('/api/getbooks/:id', (req, res) => {
req.params //默认是一个空对象,如果传的参数为动态参数,则里面存放通过:动态匹配到的参数值{id:动态参数值}
})
:后面的字符串可以任意取名
可以匹配多个动态参数-> :id/:name
Express中的路由
在Express中,路由指的是客户端的请求与服务器处理函数之间的映射关系
在Express中,路由由三部分组成:请求的类型、请求的地址、对应的处理函数,格式如下:
app.请求类型('请求地址',处理函数)
路由匹配的过程:每当一个请求到达服务器之后,需要先经过路由的匹配,只有匹配成功之后,才会调用对应的处理函数(我理解:用户请求类型和请求地址必须和我的请求类型和地址匹配了,我才能给你响应响应的数据)
在匹配时,会按照路由的顺序进行匹配,如果请求类型和请求的URL同时匹配成功,则Express会将这次请求,转交给对应的function函数进行处理
模块化路由
为了方便对路由进行模块化的管理,推荐将路由抽离为单独的模块
将路由抽离为单独模块的步骤如下:
- 创建路由模块对应的js文件
- 调用express.Router()函数创建路由实例对象
- 向路由实例对象上挂载具体的路由
- 使用module.exports导出路由实例对象
- 使用app.user(导入的路由对象)函数注册路由模块
// --------------------- 使用路由的步骤 ----------------------
*// 1. 加载express模块
const express = require('express')
*// 2. 创建 router 对象
const router = express.Router()
*// 3. 把接口挂载到 router 对象上
router.post('/reguser', (req, res) => {})
router.post('/login', (req, res) => {})
* // 4. 导出 router 对象
module.exports = route
* index.js 中
* 5. 加载路由模块,并注册成中间件
// 三行必须的代码,启动服务
const express = require('express')
const app = express()
// 加载自定义的路由模块,注册中间件
let loginRouter = require('./routers/login')
app.use('/api', loginRouter)
app.listen(3006, () => console.log('启动了'))