Nodejs如何解決跨域(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模塊
我們也可以通過引入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))
axios
值得註意的一點是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
Nodejs CORS跨域問題
在響應頭裡設置:'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)
總結
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Ajax解決跨域之設置CORS響應頭實現跨域案例詳解
- Vue項目中該如何解決跨域問題
- 深入淺析同源與跨域,jsonp(函數封裝),CORS原理
- 前端面試必會網絡跨域問題解決方法
- VUE跨域詳解以及常用解決跨域的方法