我正在尝试向本地服务器发出一个简单的http请求(由Node.js运行)。我所需的网址应该是什么样的?
我正在尝试使我的网站以另一种方式运行:单击按钮后,将运行脚本。脚本形成http请求并将其发送到我的Node服务器,该服务器通过命令行在本地计算机上运行。节点服务器处理http请求,从我的mongodb数据库中获取数据,并用此数据响应我的脚本。最后,脚本必须将数据作为内容输出到网页上。问题是我在浏览器控制台中收到此错误:
“访问来自'file:/// C:/.../serverSide.js的XMLHttpRequest” 原点“空”已被CORS政策阻止:跨原点请求 仅支持协议方案:http,data,chrome, chrome-extension,https。”
我猜这是因为无效的url,我在http请求中将其用作参数。我所有的文件(html,脚本和节点服务器端)都在同一文件夹中。我已经使用了以下url
个值:'serverSide.js'
,'http://localhost:8080/'
,'localhost:8080'
,所有这些都导致上面的错误。那么,我该如何用作url
?
我的脚本:
function textOutput() {
let xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if ( this.readyState == 4 && this.status == 200 ) {
document.getElementById('questionText').innerHTML =
this.responseText
}
};
xhttp.open('GET', 'serverSide.js', true);
xhttp.send();
};
这是我处理请求的服务器端的一部分:
...
http.createServer(function (req, res) {
ukrlitquestions.findOne({id: randomId(1, docsAmount)}, 'text',
function(err, result) {
if (err) console.log(err);
let quesText = result.text;
res.write(quesText);
console.log(quesText);
res.end();
});
}).listen(8080);
...
答案 0 :(得分:0)
您需要指向正确的域。像http://localhost:3000/server-side.js
答案 1 :(得分:0)
您看到的是CORS错误。 https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
Web浏览器在发送真实请求之前先发送一个OPTION请求。网址应类似于http://localhost:8080/server-side.js
尝试将以下内容添加到服务器端:
if (req.method === "OPTIONS") {
res.sendStatus(200);
}
答案 2 :(得分:0)
打开 http.open('GET','http://localhost:8080/serverSide.js',true)
答案 3 :(得分:0)
您需要允许服务器上的CORS。您可以通过添加它来实现。
server {
listen 80;
allow 123.123.123.123;
deny all;
error_page 403 $scheme://test.com;
root /var/www/html;
index index.php;
server_name stg.test.com;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
}