express 创建后台服务时,后台服务是需要配置请求体和响应头的。
如果不想安装中间件,给 header 设计不同的响应头,也可以做到同中间件同样的效果,但是设置setHeader()需要放在路由之前
请求体
当后台收到一个 POST 或 GET 时,Node.js 的 request 可以将请求体也就是请求的数据传给服务端。
响应头
当服务端收到请求体的数据后,会通过 response 返回一个实例对象,这个实例对象就是请求到的数据,包含请求状态信息,数据实例以及错误信息。
Response 是一个响应对象,默认使用它的简写 res 代替。
Express 提供了20种 res 方法,默认情况下,设置响应头使用 res.setHeader() 方法,
res.set(field, [value])
例如:
app.all('*', function(req, res, next) { res.setHeader('Access-Control-Allow-Origin','*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST'); res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type, Authorization'); // res.setHeader("Content-Type", "application/json;charset=utf-8"); next(); })
或传递一个字段或多个字段:
res.set({ 'Content-Type': 'text/plain', 'Content-Length': '123', 'ETag': '12345' })
res.setHeader() 的别名为 res.header(),这两个方法是等效的。
不同的响应头,都有不同的作用:
- Access-Control-Allow-Origin 允许跨域访问
-
Access-Control-Allow-Headers 向浏览器发送预检请求,询问是否支持跨域的自定义 header 字段
-
Access-Control-Allow-Methods 询问是否支持跨域的请求方法
-
Access-Control-Allow-Credentials 允许客户端携带验证信息去请求,例如 cookie 之类的
以下是全局设置响应头的代码:
const app = express(); app.all('*', (req, res, next) => { const { origin, Origin, referer, Referer } = req.headers; const allowOrigin = origin || Origin || referer || Referer || '*'; res.header("Access-Control-Allow-Origin", allowOrigin); res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With"); res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); res.header("Access-Control-Allow-Credentials", true); //可以带cookies res.header("X-Powered-By", 'Express'); if (req.method == 'OPTIONS') { res.sendStatus(200); } else { next(); } });
参考这个网站:https://www.codota.com/code/javascript/functions/express/Response/header
有很多的例子。