NodeJS实现跨域的方法(使用示例)

 更新时间:2024年05月25日 14:40:02   作者:还是大剑师兰特  
CORS是一种 W3C 标准,它使用额外的 HTTP 头来告诉浏览器让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源,这篇文章主要介绍了NodeJS实现跨域的方法,需要的朋友可以参考下

方法一,直接在入口文件如 server.js中填写

//引用express 
    const express = require('express') 
    //设置实例,调用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

CORS 是一种 W3C 标准,它使用额外的 HTTP 头来告诉浏览器让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。在 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') 
}) 

动态来源配置 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 是一种非官方的跨域数据交互协议,利用 <script> 标签没有跨域限制的特点来实现跨域通信。但请注意,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)})`);
});

四、代理服务器

在开发环境中,有时候会使用代理服务器来转发请求,避免直接对 API 服务器进行跨域请求。可以使用 http-proxy-middleware 或 Express 的 proxy 中间件。

综上,CORS 是最常用的跨域解决方案,因为它既标准又灵活,支持各种HTTP方法和自定义头部。其他方法如 JSONP 和代理服务器则根据具体场景选择使用。

到此这篇关于NodeJS实现跨域的方法的文章就介绍到这了,更多相关NodeJS跨域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Node.js 中判断一个文件是否存在

    Node.js 中判断一个文件是否存在

    这篇文章主要记录一些 Node.js 应用中的小知识点,如果你 Google/Baidu “Node.js 如何判断文件是否存在” 发现给出的很多答案还是使用的 fs.exists,这里不推荐使用 fs.exists 你可以选择 fs.stat 或 fs.access。
    2020-08-08
  • 宝塔部署nodejs项目的实战步骤

    宝塔部署nodejs项目的实战步骤

    前段时间部署node项目的时候出现了一点问题,所以想着给大家总结下,这篇文章主要给大家介绍了关于宝塔部署nodejs项目的实战步骤,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Nodejs Socket连接池及TCP HTTP网络模型详解

    Nodejs Socket连接池及TCP HTTP网络模型详解

    这篇文章主要为大家介绍了Nodejs Socket连接池及TCP HTTP网络模型,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Linux环境部署node服务并启动详细步骤

    Linux环境部署node服务并启动详细步骤

    最近用node.js开发了一个web项目,下面这篇文章主要给大家介绍了关于Linux环境部署node服务并启动的详细步骤,文中通过图文以及示例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • nodeJS中关于path.resolve()的用法解析

    nodeJS中关于path.resolve()的用法解析

    这篇文章主要介绍了nodeJS中关于path.resolve()的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 详解Windows下安装Nodejs步骤

    详解Windows下安装Nodejs步骤

    本篇文章主要介绍了详解Windows下安装Nodejs步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • nvm版本导致npm install报错Unexpected token '.'的解决办法

    nvm版本导致npm install报错Unexpected token '.'的解决办法

    最近做项目遇到npm install 的问题,下面这篇文章主要给大家介绍了关于nvm版本导致npm install报错Unexpected token '.'的解决办法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • puppeteer实现html截图的示例代码

    puppeteer实现html截图的示例代码

    通过Puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据,这篇文章主要介绍了puppeteer实现截图的示例代码,感兴趣的可以了解一下
    2019-01-01
  • 轻松开发 Streamable HTTP MCP Server

    轻松开发 Streamable HTTP MCP Server

    本文介绍了MCP协议中stdio和SSE协议的优缺点,以及MCP的最新协议StreamableHTTP的特性,韩老师还分享了如何使用YeomanGeneratorforMCPServer快速开发一个支持StreamableHTTP的MCPServer,并在VSCode中进行调试
    2025-05-05
  • 10个Node.js库帮助你优化代码和简化开发

    10个Node.js库帮助你优化代码和简化开发

    这篇文章主要介绍了10个Node.js库帮助你优化代码和简化开发,其中包括处理数组、对象、字符串库Lodash,缓存数据处理库Node-cache,解析、操作和格式化日期和时间库Moment.js,Redis操作库,发送电子邮件库Nodemailer
    2023-05-05

最新评论