• Express 统一配置响应头 header 方法


    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

    有很多的例子。

  • 相关阅读:
    正整数分解质因数
    水仙花数
    键入任意整数,将之从小到大输出
    有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少
    输入某年某月某日,判断这一天是这一年的第几天?
    java 日期增加
    oracle数据库 ORA-01461: can bind a LONG value only for insert into a LONG column解决方案
    JAVA实现图片叠加效果
    JAVA_GET请求URL
    sqlserver-触发器-判断更新了哪个字段。
  • 原文地址:https://www.cnblogs.com/baiyygynui/p/13743135.html
Copyright © 2020-2023  润新知