什么是express
-
官方给出的概念:
Express
是基于Node.js
平台,快速、开放、极简的Web
开发框架,官方 -
通俗的理解:
Express
的作用和Node.js
内置的http
模块类似,是专门用来创建 Web 服务器的 -
Express
的本质:就是一个npm
上的第三方包,提供了快速创建 Web 服务器的便捷方法
Express 的基本使用
1.安装
npm i express@4.17.1
2.创建基本的web服务器
// 1.导入 express
const express = require('express')
// 2. 创建 web 服务器
const app = express()
//静态资源托管
app.use(express.static('文件名'))
// 3. 调用 app.listen(端口号, 启动后的回调函数), 启动服务器
app.listen(3000, () => {
console.log('running……')
})
监听 GET 和 POST 请求,并响应客户端
1.监听 GET 请求
通过 app.get()
方法,可以监听客户端的 GET 请求
2.把内容响应给客户端
通过 res.send()
方法,可以把处理好的内容,发送给客户端
3.完整代码
// 1.导入 express
const express = require('express')
// 2. 创建 web 服务器
const app = express()
// 4. 监听客户端的 GET 和 Post 请求,并向客户端响应具体的内容
app.get('/user', (req, res) => {
// 调用 express 提供的 res.send() 方法,向客户端响应一个 JSON 对象
res.send({ name: 'zs', age: 20, gender: '男' })
})
app.post('/user', (req, res) => {
// 调用 express 提供的 res.send() 方法,向客户端响应一个文本字符串
res.send('请求成功')
})
// 3. 调用 app.listen(端口号, 启动后的回调函数), 启动服务器
app.listen(3000, () => {
console.log('running……')
})
获取 URL 中携带的查询参数
通过 req.query
对象,可以访问到客户端通过查询字符串的形式,发送到服务器的参数
app.get('/',(req,res)=>{
//req.query 默认是一个空对象
//客户端使用?name=zs&age=20 这种查询字符串形式,发送到服务器的参数
//可以通过 req.query 对象访问到
//req.query.name req.query.age
console.log(req.query)
})
获取 URL 中的动态参数
通过 req.params
对象,可以访问到 URL
中,通过 : 匹配到的动态参数
app.get('/user/:id', (req, res) => {
//req.params 默认是一个空对象
//里面存放着通过:动态匹配的参数值
console.log(req.params);
})
注意
-
/:id
-- id 值不是固定的,可以自己定义,例如:/:ids
-
展示到页面中的
id
键,是自定义的变量值 -
参数可以有多个,例如:
/:ids/:name
托管静态资源
express.static()
const express = require('express')
const app = express()
// 在这里,调用 express.static() 方法,快速的对外提供静态资源
app.use(express.static('public'))
app.listen(3000, () => {
console.log('running……')
})
挂载路径前缀
const express = require('express')
const app = express()
// 在这里,调用 express.static() 方法,快速的对外提供静态资源
app.use('/static', express.static('public'))
app.listen(3000, () => {
console.log('running……')
})
Express 路由
Express 中的路由
-
在
Express
中,路由指的是客户端的请求与服务器处理函数之间的映射关系 -
Express 中的路由分 3 部分组成,分别是请求的类型、请求的 URL 地址、处理函数
模块化路由
为了方便对路由进行模块化的管理,Express
不建议将路由直接挂载到 app
上,而是推荐将路由抽离为单独的模块,将路由抽离为单独模块的步骤如下
- 创建路由模块对于的 .js 文件
- 调用 express.Router() 函数创建路由对象
- 向路由对象上挂载具体的路由
- 使用 module.express 向外共享路由对象
- 使用 app.use() 函数注册路由模块
// 1. 导入 express
const express = require('express')
// 2. 创建路由对象
const router = express.Router()
// 3. 挂载获取用户列表的路由
router.get('/user/list', (req, res) => {
res.send('用户列表')
})
// 4. 挂载添加用户列表的路由
router.post('/user/add', (req, res) => {
res.send('添加用户')
})
// 5. 向外导出路由对象
module.exports = router
注册路由模块
- 导入路由模块
- 使用 app.use() 注册路由模块
const express = require('express')
const app = express()
// 导入路由模块
const userRouter = require('./002-router')
// 使用 app.use() 注册路由模块
app.use(userRouter)
app.listen(3000, () => {
console.log('running……')
})
为路由模块添加前缀
-
类似于托管静态资源写法,为静态资源统一挂载访问前缀一样
-
注意,添加了路由前缀后,访问的路由的时候,也应该加上前缀
const express = require('express')
const app = express()
// 导入路由模块
const userRouter = require('./002-router')
// 使用 app.use() 注册路由模块
// 给路由模块添加统一得到访问前缀 /api
app.use('/api', userRouter)
app.listen(3000, () => {
console.log('running……')
})