Express是一个Web开发框架。Express本质上是NPM上的一个第三方模块,提供了快速创建Web服务器、API接口服务器的方法。Express中文网地址为https://www.expressjs.com.cn/,官网地址为https://expressjs.com/。
使用Node.js提供的原生http模块也一样可以创建Web服务器。只不过http模块用起来很麻烦、开发效率低,而Express在基于http的基础上进行了进一步的封装,能极大提高开发效率。
安装Express 4.17.2版本:
1npm i express@4.17.2
使用Express的基本步骤如下:
1const express = require('express');
2
3// 创建 Web 服务器
4const app = express()
5
6// 监听 80 端口,服务器启动成功后执行回调函数
7app.listen(80, () => {
8 console.log('Express server running at http://127.0.0.1');
9})
启动服务器,程序会先执行app.listen()方法中的回调函数。
请求处理
在Express中,请求方式并不需要自己使用Request对象去判断,可以直接调用Express提供的方法:
-
app.get():监听 GET 请求。1/** 2 * 监听客户端 GET /user 请求 3 * 参数1:客户端请求的 URL 地址 4 * 参数2:请求对应的处理函数 5 * - req: Request 对象,包含了请求相关的属性与方法 6 * - res: Response 对象,包含了响应相关的属性与方法 7 */ 8app.get('/uer', (req, res) => { 9 // 向客户端发送 JSON 对象 10 res.send({ 11 id: req.params['id'], 12 name: 'zhangsan', 13 age: '20', 14 gender: 'man' 15 }) 16}) -
app.post():监听 POST 请求。1/** 2 * 监听客户端 POST /login 请求 3 * post() 方法的参数与 get() 方法类似 4 */ 5app.post('/login', (req, res) => { 6 // 向客户端发送文本消息 7 res.send('登录成功!') 8})
在Express中,可以使用Response对象的send()方法向客户端响应数据,响应的数据可以是JSON、文本、HTML等等。
注:在调用了
res.send()方法之后,代表业务逻辑处理完毕,所以res.send()方法之后不能再添加任何处理逻辑。
Express支持所有关于HTTP的请求,可以通过使用app.METHOD()来指定请求方式。例如DELETE请求使用app.delete()。
Express还支持通过app.all()来匹配所有请求方式。
获取请求参数
获取查询参数:
1app.post('/login', (req, res) => {
2 // 使用 request.query 对象,获取查询(路径)参数
3 console.log(req.query);
4 // 获取具体的查询参数
5 let name = req.query['name']
6 let password = req.query['password']
7 if (!name || !password) {
8 return res.send('登录失败! 请输入用户名密码!')
9 }
10 if (name == 'admin' && password == '123456') {
11 return res.send('登录成功!')
12 }
13 res.send('登录失败! 用户名或密码不正确!')
14})
例如,使用 POST http://localhost/login?name=admin&password=123456 进行请求时,可以通过req.query['name']和req.query['password']获取name=admin和password=123456这两个参数。然后将获取到的参数进行判断。
获取动态参数:
1app.get('/user/:id', (req, res) => {
2 // 动态参数使用 ":" + 参数名 定义
3 // 使用 request.params 对象获取动态(URL)参数
4 console.log(req.params);
5 // 向客户端发送 JSON 对象
6 res.send({
7 id: req.params['id'],
8 name: 'zhangsan',
9 age: '20',
10 gender: 'man'
11 })
12})
例如,使用 GET http://localhost/user/1 进行请求时,通过req.params['id']获取URL中这个:id参数。
托管静态资源
Express中使用express.static()和app.use()方法可以方便地托管静态资源。例如,托管存放静态资源的public目录:
1/**
2 * 使用 express.static() 方法托管静态资源
3 * express.static() 需要使用 app.use() 方法,并将其作为参数放入 app.use() 中
4 * 在进行访问时,默认直接在根路径下请求资源,无需使用 public 作为请求路径
5 * 并且 public 下的 index.html 会作为 GET / 请求时默认响应的页面
6 * 注:public 目录需要与当前 .js 文件同级
7 */
8app.use(express.static('public'))
express.static()可以通过多次调用来托管多个静态目录:
1app.use(express.static('public'))
2/**
3 * 可以多次使用 express.static() 托管多个静态资源
4 * 在访问静态资源时,express.static() 会根据目录的添加顺序查找所需的文件
5 */
6app.use(express.static('files'))
Express托管静态目录时,可以指定访问当前资源的路径前缀:
1/**
2 * app.use() 可以使用路径前缀来访问静态资源
3 * 只需要将 路径前缀 作为 参数1,将 express.static() 方法作为 参数2 即可
4 */
5app.use('/static', express.static('static'))
评论