Express基本操作
Posted by Mars . Modified at
Express框架基本操作
引入与创建express app实例
const express = require('express')
const app = express()
基本路由
app.METHOD(PATH, HANDLER)
- METHOD: http方法;
- PATH: 请求路径,一旦匹配执行handler;
- HANDLER: 路径匹配后的执行函数。
// 收到post请求,且路径为'/'时,返回'Got a POST request'。
app.post('/', function (req, res) {
res.send('Got a POST request')
})
请求与响应api
Express
的请求与响应对象,继承自Node
的http.IncomingMessage
和http.OutgoingMessage
。
Express对它们进行了扩展。
请求对象request
request
对象有以下api:
- req.app
- req.baseUrl
- req.body
- req.cookies
- req.fresh
- req.hostname
- req.ip
- req.ips
- req.method
- req.originalUrl
- req.params
- req.path
- req.protocol
- req.query
- req.route
- req.secure
- req.signedCookies
- req.stale
- req.subdomains
- req.xhr
响应对象response
中间件 Middleware
中间件的含义
中间件: 在客户端请求到达Express,与Express处理这个请求的中间,对请求进行拦截,从而执行一些其他逻辑的组件。
在Express中,app.use(fn)
这个api可以为Express应用实例设置中间件。
app.use(fn)
的功能是:对任何一个到达的请求,执行一次fn
(不区分请求的具体形式)。
Express中间件函数fn
接受三个参数:fn(req, res, next)
:
- req: 请求对象;
- res: 响应对象;
- next: 交出控制权,去往下一个处理流程。(可以直接调用:next());
中间件可以实现以下功能:
- 执行任意代码;
- 对请求对象
req
和响应对象res
进行修改; - 结束请求-响应循环;
- 交出执行权,给下一个中间件。
中间件的实际效果,与它的设置位置有关
因为所有请求到达Express,都是按从上到下的顺序依次处理的。中间件设置在哪里,请求就在哪里处理。
其实路由也是中间件?
是的,路由只是一种特殊的中间件。路由中间件的功能是:只对匹配到相同路径的请求进行处理,否则执行next()向下交付。
中间件是Express核心的设计
中间件是Express最为核心的一个设计,它的好处是:可以在不修改业务逻辑代码的情况下,任意添加我们想要的功能。
Express的功能就是由一个个中间件先后串联完成的。
中间件,可以理解为是
面向切面编程AOP
的一种实现。
Express中间件的分类
- 应用程序级中间件:
托管静态文件
托管静态文件,相当于公开了某个文件夹的内容。当用户请求对应目录的静态文件,则返回对应的文件。
使用express.static()
中间件实现对某个路径下文件的静态托管。
express.static(rootPath, [options]);
设置方式:
app.use(path, express.static('public'));
含义是:当用户匹配path时,映射到对应的public文件夹,获取对应的静态文件返回给用户。
如果不提供path,则默认是根目录。
// 用户访问`域名/static/静态文件名`,则返回public文件夹下对应文件给用户。
app.use('/static', express.static('public'));