尝试启用CORS:require未定义错误

时间:2019-12-16 08:19:30

标签: javascript node.js cors

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;
});

并且由于稍后我对API使用XMLHttpRequest(具有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错误。我在哪里弄错了?

2 个答案:

答案 0 :(得分: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服务器,然后可以从某些外部代理(例如浏览器的网页)连接到该http服务器。

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

答案 1 :(得分:-1)

require()是NodeJS功能,有关更多详细信息,请参见link

请分享您启动应用程序的命令吗?