博客
关于我
NodeJS实现跨域的方法( 4种 )
阅读量:792 次
发布时间:2023-02-16

本文共 2499 字,大约阅读时间需要 8 分钟。

跨域请求(CORS)配置指南

在开发过程中,跨域请求(CORS,Cross-Origin Resource Sharing)是解决现代网页应用中数据请求问题的重要技术。以下是几种常用的跨域处理方法,帮助你更好地理解和应用。

一、直接配置跨域

server.js 中,可以直接配置跨域头部信息,适用于简单的场景。

const express = require('express')const app = express() 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 中间件

在 Node.js 中,cors 是一个强大的工具,支持丰富的配置选项。

安装依赖:

npm install cors

示例使用:

const express = require('express')const cors = require('cors')const app = express() app.use(cors()) app.get('/products/:id', (req, res, next) => {    res.json({        msg: '跨域请求已开启'    })}) app.listen(80, () => {    console.log('CORS 服务器已启动')})

你可以根据需求定制 CORS 配置:

const express = require('express')const cors = require('cors')const app = express() const corsOptions = {    origin: 'http://example.com',    optionsSuccessStatus: 200} app.get('/products/:id', cors(corsOptions), (req, res, next) => {    res.json({        msg: '仅限 example.com 域名跨域访问'    })}) app.listen(80, () => {    console.log('CORS 服务器已启动')})

三、动态域名配置

对于多个需要跨域访问的域名,可以通过动态方式配置。

const express = require('express')const cors = require('cors')const app = express() const whitelist = ['http://example1.com', 'http://example2.com'] const corsOptions = {    origin: (origin, callback) => {        if (whitelist.indexOf(origin) !== -1) {            callback(null, true)        } else {            callback(new Error('跨域请求被拒绝'))        }    }} app.get('/products/:id', cors(corsOptions), (req, res, next) => {    res.json({        msg: '仅限白名单中的域名跨域访问'    })}) app.listen(80, () => {    console.log('CORS 服务器已启动')})

四、JSONP(仅限 GET 请求)

JSONP 是一种非正式的跨域数据传输方法,适用于 GET 请求,但存在一定的安全风险。

app.get('/jsonp', (req, res) => {    const callback = req.query.callback    const data = {        message: '这是一个 JSONP 响应'    }    res.type('text/javascript')    res.send(`${callback}(${JSON.stringify(data)})`)})

五、代理服务器

在开发环境中,你也可以通过代理服务器转发请求,避免直接对目标服务器跨域。

使用 http-proxy-middleware

const express = require('express')const httpProxy = require('http-proxy-middleware')const app = express() const proxy = httpProxy({    target: 'https://api.example.com',    changeOrigin: true}) app.use('/api', proxy) app.listen(80, () => {    console.log('代理服务器已启动')})

选择合适的跨域解决方案

CORS 是最常用的跨域解决方案,因其支持丰富的配置选项和灵活的使用方式。无论是简单的跨域请求,还是复杂的跨域配置,CORS 都能胜任。根据项目需求,选择合适的跨域解决方案,确保应用的稳定运行。

转载地址:http://fxjfk.baihongyu.com/

你可能感兴趣的文章
NOAA(美国海洋和大气管理局)气象数据获取与POI点数据获取
查看>>
NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
查看>>
node exporter完整版
查看>>
node HelloWorld入门篇
查看>>
Node JS: < 一> 初识Node JS
查看>>
Node JS: < 二> Node JS例子解析
查看>>
Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime(72)
查看>>
Node 裁切图片的方法
查看>>
Node+Express连接mysql实现增删改查
查看>>
node, nvm, npm,pnpm,以前简单的前端环境为什么越来越复杂
查看>>
Node-RED中Button按钮组件和TextInput文字输入组件的使用
查看>>
vue3+Ts 项目打包时报错 ‘reactive‘is declared but its value is never read.及解决方法
查看>>
Node-RED中Switch开关和Dropdown选择组件的使用
查看>>
Node-RED中使用html节点爬取HTML网页资料之爬取Node-RED的最新版本
查看>>
Node-RED中使用JSON数据建立web网站
查看>>
Node-RED中使用json节点解析JSON数据
查看>>
Node-RED中使用node-random节点来实现随机数在折线图中显示
查看>>
Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
查看>>
Node-RED中使用node-red-contrib-image-output节点实现图片预览
查看>>
Node-RED中使用node-red-node-ui-iframe节点实现内嵌iframe访问其他网站的效果
查看>>