NodeJS實現(xiàn)跨域的方法(使用示例)
方法一,直接在入口文件如 server.js中填寫
//引用express const express = require('express') //設(shè)置實例,調(diào)用express方法 const app = express() //設(shè)置跨域 app.all("*",(req,res,next)=>{ res.header("Access-Control-Allow-Origin","*") res.header("Access-Control-Allow-Headers","Content-Type") res.header("Access-Control-Allow-Methods","*") res.header('Content-Type','application/json;charset=utf-8') next() })
方法二,使用中間件cors
CORS 是一種 W3C 標準,它使用額外的 HTTP 頭來告訴瀏覽器讓運行在一個 origin (domain) 上的Web應(yīng)用被準許訪問來自不同源服務(wù)器上的指定的資源。在 Node.js 中,可以使用 cors 這個 npm 包來簡化 CORS 的配置。
安裝cors
npm install cors
使用示例
var express = require('express') var cors = require('cors') var app = express() app.use(cors()) app.get('/products/:id', function (req, res, next) { res.json({msg: '這對所有來源都啟用了 CORS!'}) }) app.listen(80, function () { console.log('CORS-enabled web server listening on port 80') })
單個路由配置 CORS
var express = require('express') var cors = require('cors') var app = express() var corsOptions = { origin: 'http://example.com', optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204 } app.get('/products/:id', cors(corsOptions), function (req, res, next) { res.json({msg: 'This is CORS-enabled for only example.com.'}) }) app.listen(80, function () { console.log('CORS-enabled web server listening on port 80') })
動態(tài)來源配置 CORS
var express = require('express') var cors = require('cors') var app = express() var whitelist = ['http://example1.com', 'http://example2.com'] var corsOptions = { origin: function (origin, callback) { if (whitelist.indexOf(origin) !== -1) { callback(null, true) } else { callback(new Error('Not allowed by CORS')) } } } app.get('/products/:id', cors(corsOptions), function (req, res, next) { res.json({msg: 'This is CORS-enabled for a whitelisted domain.'}) }) app.listen(80, function () { console.log('CORS-enabled web server listening on port 80') })
三、使用 JSONP (僅限 GET 請求)
JSONP 是一種非官方的跨域數(shù)據(jù)交互協(xié)議,利用 <script>
標簽沒有跨域限制的特點來實現(xiàn)跨域通信。但請注意,JSONP 只能用于 GET 請求,并且存在安全風險。
示例:
app.get('/jsonp', (req, res) => { const callback = req.query.callback; const data = { message: 'Hello, this is JSONP response' }; res.type('text/javascript'); res.send(`${callback}(${JSON.stringify(data)})`); });
四、代理服務(wù)器
在開發(fā)環(huán)境中,有時候會使用代理服務(wù)器來轉(zhuǎn)發(fā)請求,避免直接對 API 服務(wù)器進行跨域請求。可以使用 http-proxy-middleware
或 Express 的 proxy
中間件。
綜上,CORS 是最常用的跨域解決方案,因為它既標準又靈活,支持各種HTTP方法和自定義頭部。其他方法如 JSONP 和代理服務(wù)器則根據(jù)具體場景選擇使用。
到此這篇關(guān)于NodeJS實現(xiàn)跨域的方法的文章就介紹到這了,更多相關(guān)NodeJS跨域內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
手把手教你VSCode配置JavaScript基于Node.js的調(diào)試環(huán)境
最近在補數(shù)據(jù)結(jié)構(gòu),在用VScode調(diào)試js代碼文件結(jié)果怎么都不行,這篇文章主要給大家介紹了關(guān)于VSCode配置JavaScript基于Node.js的調(diào)試環(huán)境的相關(guān)資料,需要的朋友可以參考下2022-12-12Node.js 數(shù)據(jù)庫 CRUD 項目示例詳解(完美解決方案)
這篇文章主要介紹了Node.js 數(shù)據(jù)庫 CRUD 項目示例詳解(完美解決方案),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2025-04-04nodeJs的安裝與npm全局環(huán)境變量的配置詳解
這篇文章主要介紹了nodeJs的安裝與npm全局環(huán)境變量的配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-01-01輕松創(chuàng)建nodejs服務(wù)器(10):處理上傳圖片
這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(10):處理上傳圖片,本文是系列文章的最后一篇,包含了一個完整的處理上傳圖片的例子,需要的朋友可以參考下2014-12-12