参考资料
express API 官方文档 (看文档)
devdocs.io express(查文档)
Express API(五部分)
- express.xxx - 内置中间件
- app.xxx - 应用设置 (如模板配置、中间件、挂载路由)
- req.xxx - 操作请求
- res.xxx - 操作响应
- router.xxx - 操作路由
1. express.xxx - 内置中间件(共7个API)
需要特别学习的 API
- express.json()
将客户端提交的 JSON 格式的数据解析到req.body中,以便在服务器端处理这些数据。
// 例如,如果你想要向客户端提供一个名为 public 的目录,
// 里面包含一些静态资源文件,你可以使用如下代码:
app.use(express.static('public'));
-
express.static()
主要用于向客户端提供静态资源文件(如 HTML、CSS、JavaScript、图像、字体等)。
这个中间件函数可以将包含静态文件的目录作为参数传递,然后在客户端请求静态文件时,Express.js 会自动查找这些文件并将其发送给客户端。 -
express.Router()
允许你将路由处理器函数分组,并在应用程序中创建独立的路由器(router)模块。
2. app.xxx - 应用设置(共22个API)
- Properties
- app.locals app.mountpath
- Events
- mount
- Methods
- app.all() app.delete() app.disable() app.disabled()
app.enable() app.enabled() app.engine() app.get()
app.get() app.listen() app.METHOD() app.param()
app.path() app.post() app.put() app.render()
app.route() app.set() app.use()
需要特别学习的 API
-
app.set('views' | 'view engine', xxx)
app.set('views', xxx)用于指定视图模板文件存放的路径。例如:app.set('views', './views');app.set('view engine', xxx)用于指定视图引擎的名称,例如:app.set('view engine', 'ejs'); -
app.get('env')
-
app.get('/xxx', fn) / app.post / app.put / app.delete ...
-
app.render()
用于渲染视图模板并将其发送给客户端。这个方法需要一个渲染的视图名称和一个可选的数据对象作为参数,并返回一个包含渲染后 HTML 的字符串。 -
app.use()
3. request.xxx - 操作请求(共28个API)
- Properties
- 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 - Methods
- req.accepts()
req.acceptsCharsets()
req.acceptsEncodings()
req.acceptsLanguages() req.get() req.is()
req.param() req.range()
需要特别学习的 API
- req.get('ContentType')
使用req.get('Content-Type')方法可以在处理 HTTP 请求时获取请求头。除了Content-Type请求头外,还有很多其他的请求头,如User-Agent、Referer、Authorization等,都可以通过req.get()方法来获取其对应的值。 - req.param('name')
用于获取路由参数、GET 和 POST 请求参数。这个方法接受一个字符串类型的参数,表示要获取的参数的名称,它会根据请求中包含的参数来源来获取参数的值并返回。
如果是在路由处理程序中获取路由参数,则可以直接在路由路径中定义参数名称并使用req.params对象获取,例如:如果要获取 GET 请求参数或 POST 请求参数,则可以使用app.get('/users/:id', (req, res) => { const userId = req.params.id; //... });req.query对象和req.body对象。req.query对象用于获取 GET 请求中的查询字符串参数,例如 URL 中的?id=1&name=Tom部分,而req.body对象用于获取 POST 请求的请求体参数。
需要注意的是,使用req.param()方法来获取参数的值可能存在安全风险,因为它会搜索所有参数的来源,比较复杂且受到攻击的参数也可以被获取到。因此,为了安全起见,最好只获取已经确定的参数来源,例如使用req.params、req.query或req.body来获取参数的值。 - req.range()
用于处理请求的 Range 头部。Range 头部是用于指定客户端请求的资源范围的 HTTP 标头。范围可以通过一个或多个字节范围指定,例如 “0-499”、“500-999” 或 “1000-”。它通常用于支持文件断点续传或对大型数据进行分块传输等场景。
4. response.xxx - 操作响应(共24个API)
- Properties
- res.app res.headersSent res.locals
- Methods
- res.append() res.attachment() res.cookie()
res.clearCookie() res.download() res.end()
res.format() res.get() res.json()
res.jsonp() res.links() res.location()
res.redirect() res.render() res.send()
res.sendFile() res.sendStatus() res.set()
res.status() res.type() res.vary()
需要特别学习的 API
- res.send() / res.sendFile()
- res.render() / res.download()
- res.headersSent()
用于检查响应头是否已经发送到客户端。
当调用res.send()、res.json()、res.render()等发送响应的函数时,Express 会根据响应类型设置不同的响应头并将响应发送到客户端。在这些函数被调用之后,如果使用res.setHeader()或者res.header()等函数修改响应头,则 Express 会抛出一个错误。因此,调用res.headersSent()可以用来检查响应头是否已经发送,从而避免意外修改已经发送的响应头。 - res.status()
用于设置响应的 HTTP 状态码。例如res.status(404).send('Not Found'); - res.set() / res.get()
用于设置和获取 HTTP 响应头信息。 - res.format()
用于根据请求头的 Accept 字段内容,动态的返回符合客户端要求的数据格式。
5. router.xxx - 操作路由(共5个API)
router 就是一个阉割版的 app