目录nodejs解决跨域(CORS)手动配置CORS模块axiOSnodejs CORS跨域问题总结Nodejs解决跨域(CORS) 前后端分离的大环境下,受制于同源策略,我们需要懂
前后端分离的大环境下,受制于同源策略,我们需要懂得实现CORS(Cross-Origin Resource Sharing)
在nodejs中,req 和 res 参数在中间件间都指向同一对象,这样我们就可以在头中间件中修改res 的header。如下:
const express = require('express')
const app = express();
app.use((req, res) => {
//在这里手动配置
res.header('Access-Control-Allow-Origin', 'example.com');
})
我们也可以通过引入cors模块快速配置。
npm i cors --save //不是node的内置模块,需要先下载
const express = require('express')
const cors = require('cors')
const app = express();
const corsConfig = {
origin:'Http://localhost:8080',
credentials:true,
}
//使用默认
app.use(cors())
//或修改默认配置
app.use(cors(corsConfig))
值得注意的一点是cors模块会将 Access-Control-Allow-Origin 默认配为 *,但是axios不接受通配符*。而且axios还需要 Access-Control-Allow-Credentials 属性为true。
Credentials我们可以手动配置,Access-Control-Allow-Origin 我们可以如下配置 :
const express = require('express')
const cors = require('cors')
const app = express();
//使用默认
app.use(cors())
.use((req, res, next) => {
console.log(req);
res.setHeader('Access-Control-Allow-Origin',req.origin),
next()
})
//req.origin是网关地址 如:http://192.168.1.1
注意:本地调试的时候axios不认为 localhost:8080 等于127.0.0.1:8080
在响应头里设置:'Access-Control-Allow-Origin': '*'
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>cors</title>
</head>
<body>
<script>
// 请求地址
fetch('http://localhost:3000/api/data')
// 请求体解析
.then(res => res.JSON())
// 获得数据
.then(result => console.log(result))
</script>
</body>
</html>
server.js
const http = require('http');
const libUrl = require('url')
http.createServer((req, res) => {
const url = libUrl.parse(req.url, true);
if (url.pathname === '/favicon.ico') return;
if (url.pathname === '/api/data') {
res.writeHead(200, {
'Content-Type': 'Application/json',
// 设置允许所有端口访问
'Access-Control-Allow-Origin': '*'
});
let obj = {
name: '张三',
age: 20,
sex: '男'
};
res.write(JSON.stringify(obj));
}
res.end();
}).listen(3000)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: Nodejs如何解决跨域(CORS)
本文链接: https://www.lsjlt.com/news/178024.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-01-12
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0