【问题标题】:trying to enable CORS: require is not defined error尝试启用 CORS:未定义要求错误
【发布时间】:2019-12-16 23:04:15
【问题描述】:

Tl;dr:尽管安装了 node.js 和 requrejs,但我在 Chrome JS 控制台中收到 require is not defined 错误。


我正在尝试使用main.js 中的以下代码访问外部 JSON 文件中的 API 密钥:

function readTextFile(file, callback) {
    var rawFile = new XMLHttpRequest();
    rawFile.overrideMimeType("application/json");
    rawFile.open("GET", file, true);
    rawFile.onreadystatechange = function() {
        if (rawFile.readyState === 4 && rawFile.status == "200") {
            callback(rawFile.responseText);
        }
    }
    rawFile.send(null);
}

readTextFile("../secrets.json", function(text){
    var data = JSON.parse(text);
    apiKey = data.api_key;
    username = data.username;
});

由于我稍后使用 XMLHttpRequest 到 API,它有一个 http:// 方案,我希望使用 CORS 来解决同源策略。

我把这些行放在main.js的开头:

var cors = require('cors')

var app = express()
app.use(cors());

我的目录结构如下:

/project
  index.html
  secrets.json
  /scripts
    main.js
    require.js

在 Chrome 上的 JS 控制台中,我收到 require is not defined 错误。我哪里出错了?

【问题讨论】:

  • require() 不是 Chrome 本身存在的东西。它存在于 node.js 中。您试图在 Chrome 中的哪个位置运行它,为什么? main.js 是您尝试在 Chrome 中运行的东西吗?那是 node.js 代码,不能在 Chrome 中运行。
  • express js 和 cors 是与使用 javascript 的服务器端开发相关的东西,而不是在 Chrome 控制台中执行的东西

标签: javascript node.js cors


【解决方案1】:

这段代码:

var cors = require('cors')

var app = express()
app.use(cors());

属于 node.js 服务器。它不能在 Chrome 中运行。它的目的是帮助您创建一个可以接受来自浏览器的跨源 http 请求的 http 服务器。

如果您尝试从中发出请求的服务器本身特别允许跨源请求,浏览器将只允许跨源 XMLHttpRequest。因此,它将是任何支持您尝试使 XMLHttpRequest 允许跨源请求(通常通过支持 CORS)的 URL 的服务器。如果服务器尚不支持您的跨源调用,则您必须修改该服务器的代码或通过您有权访问的某种代理发出请求,该代理将为您获取数据并将其转发回浏览器.

我哪里出错了?

好吧,require('cors') 以及您在下面显示的其他两行代码并不意味着在浏览器中运行。它们在 node.js 环境中运行,并将用于创建一个 http 服务器,然后您可以从一些外部代理(如浏览器的网页)连接到该服务器。

在浏览器中,如果服务器尚未配置为接受跨源请求,则您无法执行任何操作来使服务器接受跨源请求。您仅有的两个选择是更改目标服务器或使用代理。

【讨论】:

  • 感谢您的帮助,我是 node.js 的新手。那么我将如何创建一个 node.js 环境来运行这些行呢?或者有没有其他方法可以在不使用 XMLHttpRequest 的情况下访问本地文件?
【解决方案2】:

require() 是 NodeJS 的功能,更多详情请参阅link

您能分享一下您启动应用程序的命令吗?

【讨论】:

    猜你喜欢
    • 2018-06-06
    • 2019-08-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2018-07-14
    • 2019-03-13
    • 2015-11-14
    相关资源
    最近更新 更多