在处理 API 请求时,通常需要考虑客户端能够接受响应的格式,并根据 Accept header 来响应对应的格式。在 Express.js 中,可以利用中间件来处理 Accept header 请求。
Accept Header 简介
Accept header 是 HTTP 请求头的一部分,用于指示客户端能够接受的响应格式及其优先级。该字段的值通常是一个或多个 MIME 类型,用分号分隔,每个 MIME 类型可以有自己的参数,例如:
Accept: text/html, application/xhtml+xml;q=0.9, */*;q=0.8
表示客户端可以接受 text/html 和 application/xhtml+xml 两种格式的响应,前者的优先级为 1.0,后者的优先级为 0.9,同时客户端也能接受其他任何格式的响应,优先级最低为 0.8。
处理 Accept Header 请求
Express.js 中提供了一个内置中间件进行 Accept header 请求的处理,称为 accepts
。该中间件将会检查请求头的 Accept 字段,然后根据客户端可以接受的格式返回对应的响应类型。
考虑下面的例子:
const express = require('express'); const app = express(); app.get('/', (req, res) => { const html = '<html><body><h1>Express.js</h1></body></html>'; const json = { message: 'Express.js' }; if (req.accepts('html')) { res.send(html); } else if (req.accepts('json')) { res.json(json); } else { res.status(406).send('Not Acceptable'); } }); app.listen(3000, () => { console.log('Server started on port 3000'); });
代码中,当客户端请求 /
路径时,首先检查客户端是否接受 HTML 格式的响应。如果可以接受,则返回 HTML;否则再检查客户端是否接受 JSON 格式的响应。如果客户端可以接受 JSON,则返回 JSON;否则返回 406 Not Acceptable。
使用 req.accepts
方法,可以接受一个或多个 MIME 类型字符串或数组。如果客户端可以接受其中的某个响应类型,则该方法将返回该响应类型字符串。如果客户端不能接受任何响应类型,则该方法将返回 false。
同时可以通过 Express.js 的 req.is
方法来检查请求体的内容类型是否符合指定 MIME 类型。
总结
在 Express.js 中,通过中间件处理 Accept header 请求可以让我们根据客户端的需求动态返回不同的响应格式,提高了 API 的灵活性和适用性。在处理 API 开发时,应该使用该特性来优化响应适配,并应该注意多测与兼容的实践,提升用户体验。
参考资料
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a38d48add4f0e0ffbb1d04