node后端与Vue前端跨域处理方法详解

yizhihongxing

一、 前言

在前后端分离的开发模式中,前端Vue与后端Node进行沟通交互涉及到跨域问题。下面我们来详细讲解node后端与Vue前端跨域处理方法。

二、 跨域原理

同源策略(Same Origin Policy)要求网页只能访问与本网页同一个域名、端口、协议的网页。也就是说,一个源的的脚本仅能读写属于该源的窗口和文档。如果读写的目标不是同源的,就会出现跨域问题。

三、 跨域解决方法

  1. JSONP

JSONP(JSON with Padding)是解决跨域问题的最简单方法。

通过动态添加 script 标签的方式,让服务端返回的数据包装在指定的 padding 函数中,再由前端解析在页面中使用。

例如:

<script>
  function callback(data) {
    console.log(data)
  }
</script>

<script src="http://www.example.com/data?callback=callback"></script>

这里的 callback 在服务端返回的数据中被自动替换成了前端定义的 callback 函数。

JSONP 的缺点在于只能支持 GET 请求,无法支持 POST 请求,还有安全隐患。

  1. CORS

CORS(Cross-origin resource sharing)可以让浏览器在请求时,自动识别是否可以跨域,从而实现跨域请求。

在 Node.js 中,只需要在响应头中指定 Access-Control-Allow-Origin 即可。

例如,需要允许指定域名的请求跨域:

app.use(function(req, res, next) {
  res.header('Access-Control-Allow-Origin', 'http://www.example.com')
  next()
})

也可以允许所有域名的请求跨域:

app.use(function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*')
  next()
})

CORS 的优点在于支持全部 HTTP 方法,安全且简单。但缺点在于会产生额外的 OPTION 请求,对于静态资源的访问会产生额外的流量。

四、 示例说明

  1. JSONP 示例

在服务端 Node.js 中,有一个数据接口:

router.get('/data', function(req, res, next) {
  let data = {
    name: 'Tom',
    age: 18,
  };
  let callback = req.query.callback;
  res.send(callback + '(' + JSON.stringify(data) + ')');
});

在前端 Vue 中,添加一个 script 标签,指定接口地址和 callback 函数:

<script>
  function callback(data) {
    console.log(data)
  }
</script>

<script src="http://www.example.com/data?callback=callback"></script>

现在在浏览器中打开 Vue 页面,就可以看到打印出的数据了。

  1. CORS 示例

在服务端 Node.js 中,要允许跨域请求:

app.use(function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With');
  if (req.method == 'OPTIONS') {
    res.send(200);
  } else {
    next();
  }
});

然后在前端 Vue 中访问该接口:

axios.get('http://www.example.com/data').then(res => {
  console.log(res.data)
})

现在在浏览器中打开 Vue 页面,就可以看到打印出的数据了。

五、 总结

使用 JSONP 或 CORS 都可以解决跨域问题,选择哪种方式要根据自己的情况进行判断。对于静态资源的访问建议使用 CORS,对于数据接口的访问建议使用 JSONP。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node后端与Vue前端跨域处理方法详解 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • Node.js中流(stream)的使用方法示例

    以下是Node.js中流的使用方法示例的完整攻略。 什么是流? 流是Node.js中许多模块所使用的核心概念之一,它是一种用于处理大量数据的技术。流是将数据拆分为小块一次一块地处理,而不是一次将整个数据处理完成。这样可以减少内存的使用,提高处理效率。 流的类型 Node.js中有四个流的类型,分别是:可读(Readable)、可写(Writable)、可读可…

    node js 2023年6月8日
    00
  • js 处理数组重复元素示例代码

    下面详细讲解一下“js 处理数组重复元素示例代码”的完整攻略。 1. 需求分析 在处理数组时,有时候需要去重,即移除数组中的重复元素。这时候我们可以使用 JavaScript 中提供的一些方法和技巧来实现。 2. 方法一:使用 Set 数据结构 Set 是 ES6 中新增的一种数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。 对于一个数组,我们…

    node js 2023年6月8日
    00
  • no-vnc和node.js实现web远程桌面的完整步骤

    以下是no-vnc和node.js实现web远程桌面的完整步骤: 准备工作 在进行no-vnc和node.js实现web远程桌面之前,需要准备以下工作: 一台linux主机,可以使用任意的linux发行版。 安装vncserver,可以使用sudo apt-get install vncserver命令进行安装。 对vncserver进行配置,使其能够远程访…

    node js 2023年6月7日
    00
  • 简单的Lua 连接操作mysql数据库的方法

    当我们需要将Lua应用程序连接到MySQL数据库时,可以使用Lua的luasql库。下面是一份完整的攻略,包括如何安装luasql库、连接MySQL数据库,以及如何使用Lua语言执行SQL查询和更新数据。 安装 Luasql 库 在使用Luasql之前,首先需要安装它。可以使用LuaRocks包管理器来安装。在终端中输入以下命令: luarocks inst…

    node js 2023年6月8日
    00
  • Windows下nodejs安装及环境配置的实战步骤

    下面是详细的“Windows下nodejs安装及环境配置的实战步骤”攻略: 一. 下载Node.js 首先,我们需要下载Node.js的安装文件。请访问Node.js的官方网站(https://nodejs.org/),然后下载适合您计算机的版本,选择LTS版本即可。推荐使用Windows Installer (.msi)版本,下载完成后,双击打开,开始安装…

    node js 2023年6月8日
    00
  • vscode 调试 node.js的方法步骤

    下面是详细讲解“vscode 调试 node.js的方法步骤”的完整攻略: 前置条件 安装 Node.js 和 Visual Studio Code; 对 Node.js 和 TypeScript 有基本的了解。 方法步骤 打开 Visual Studio Code,打开项目文件夹; 在项目根目录下创建 .vscode 目录,若已经存在则跳过; 在 .vsc…

    node js 2023年6月8日
    00
  • 快速掌握Node.js中setTimeout和setInterval的使用方法

    以下是“快速掌握Node.js中setTimeout和setInterval的使用方法”的完整攻略: 一、介绍 在 Node.js 中,可以使用 setTimeout 或 setInterval 实现定时器的功能。setTimeout 用来设定一个定时器,在指定的时间间隔后执行一次指定的函数,而 setInterval 则用于重复执行函数。本篇攻略将详细讲解…

    node js 2023年6月8日
    00
  • Nodejs中的JWT和Session的使用

    首先我们需要明确JWT和Session的概念。JWT(JSON Web Token)是一种用于身份验证的标准,它可以在用户和服务器之间传递信息并进行验证。Session则是一种服务器端的会话技术,用于记录用户的登录状态。 Node.js是一个非常适合处理用户请求和后端逻辑的语言,因此我们可以使用Node.js来实现JWT和Session的使用。 以下是Nod…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部