Express 项目环境搭建 -- 3. 解析 json 请求

在浏览器调用 Express 实现的 HTTP 服务时,经常会出现跨域问题,这个是浏览器为了安全做的限制。 但是很多时候,前端页面可能就是与 http api 服务并非同一个域名下的。这时候就要对 http 的 response 中的 headers 进行处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const express = require("express");
const app = express();
app.all("*", function(req, res, next) {
// 设置允许跨域的域名,*代表允许任意域名跨域
res.header("Access-Control-Allow-Origin", "*");
// 允许的 header 类型
res.header("Access-Control-Allow-Headers", "content-type");
// 跨域允许的请求方式
res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");
if (req.method.toLowerCase() === "options") {
// 让 options 尝试请求快速结束
res.send(200);
} else { next(); }
});

为什么只要加这处理,浏览器的跨域报错就没了呢?

跨域问题只有浏览器才会存在,如果是非浏览器调用接口,其实并不会有什么跨域这种说法,毕竟不同域名下的服务调用也不会有像浏览器那样的跨域报错。

浏览器判断是否跨域,以及是否运行跨域,是判断服务给的响应体的 header 中Access-Control-Allow-OriginAccess-Control-Allow-HeadersAccess-Control-Allow-Methods是否符合当前的请求。
如果前置存在 Nginx 实现了添加 header 参数,则不需要在 Express 中再设置。


Express 项目环境搭建 -- 3. 解析 json 请求
https://bubao.github.io/posts/c18e4cf6.html
作者
一念
发布于
2022年3月7日
许可协议