在 vue js 中的基于 Web 的 html 脚本中导入 js 文件时出现 CORS 错误

Posted

技术标签:

【中文标题】在 vue js 中的基于 Web 的 html 脚本中导入 js 文件时出现 CORS 错误【英文标题】:CORS error while importing a js file in my web based html script in vue js 【发布时间】:2020-02-16 04:20:25 【问题描述】:

我正在尝试从 vue 实例内置方法中调用 api

但它显示了一些错误

我正处于训练期,这对我来说是全新的

错误: 访问脚本在 'file:///home/wohlig/Documents/Projects/Training/Rough/Vue/apicalling/app.js' 来自原产地 “null”已被 CORS 策略阻止:跨源请求仅支持 协议方案:http、data、chrome、chrome-extension、https。

获取文件://home/wohlig/Documents/Projects/Training/Rough/Vue/apicalling/app.js 网络::ERR_FAILED

我正在尝试从我的数据库中检索数据

app.html
<html>
    <head>
        <script src = "https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    </head>
    <body>
        <div>

        </div>
        <script type="module">
         import  nav  from './app.js'

        var vm = new Vue(
                data: 
                    datas:"gsdgsdg"
                ,
                created()
                    nav.getOneId(function (err, data)
                        if(data)
                            console.log("afasfsafasfasf+++++++++="+data)
                        
                    )
                    console.log("dfafasdfadf")
                
                )
        </script>
    </body>
</html>



app.js

import axios from "axios";

var adminUrl = "http://localhost:3000/";

export default 
  getOneId: callback => 
    return axios
      .get(adminUrl + "movie/getOneId/5d9d736963a1f027693e7fae", )
      .then(data => 
        callback(null, data);
      )
      .catch(err => 
        callback(err);
      );
  

【问题讨论】:

【参考方案1】:

发生此错误是因为您直接在浏览器中打开app.html。例如。当您双击并打开它时。

相反,您必须在项目所在的目录中启动本地服务器。

如果您使用的是项目模板,它可能已经配置了npm start 命令。在这种情况下,使用该命令启动开发服务器。否则,您可以转到app.html 所在的文件夹并运行npx live-server - 这将为当前目录提供服务。我假设你已经安装了 nodejs(node -v 检查)否则命令将不会运行

【讨论】:

【参考方案2】:

尝试在 package.json 中使用这一行 "代理": "http://192.165.1.220:28080",

此主机和端口将是 walmart 并使用 npm 安装“http-proxy-middleware”并重试。

CORS:解释 跨域资源共享 (CORS) 是一种机制,它使用额外的 HTTP 标头告诉浏览器让在一个来源运行的 Web 应用程序访问来自不同来源的选定资源。当一个 Web 应用程序请求一个与它自己具有不同来源(域、协议或端口)的资源时,它会执行一个跨域 HTTP 请求。意味着您的 localhost 正在尝试连接其他域,因此出于安全目的它被阻止了。你需要启用它以连接到他们的 IP。

更清晰和更广泛的观点:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

您还应该使用 http 协议而不是 file:///home/wohlig/Documents/Projects/Training/Rough/Vue/apicalling/app.js 可以通过这个https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSRequestNotHttp

【讨论】:

以上是关于在 vue js 中的基于 Web 的 html 脚本中导入 js 文件时出现 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章

《基于Vue.js的Web前端应用研究》文献阅读(十五)

Vue 2.x 在 Weex 和 Web 中的差异

PiranhaCMS 中的 DevExpress Web 仪表板

基于Vue JS, Webpack 以及Material Design的渐进式web应用第1部分

Web前端/全栈核心(html5/css3/js/vue/react/angular/es6/node)观看笔记

前端中的Vue是啥?