【发布时间】:2019-05-16 07:55:22
【问题描述】:
我目前在 apache 服务器上托管一个网站(如果相关,则在拱顶上)。我需要的是能够在单击其中一个网页上的按钮后调用一个小的节点脚本(最终将发送一封电子邮件)。
目前的工作方式如下
客户端.js
$('#some-long-stupid-unique-name').click(function(){
$.ajax({
type: 'POST',
url: 'http://localhost:8081/sendMail'
});
});
邮件.js
var cors = require('cors');
var express = require('express');
var app = express();
app.use(cors());
app.post('/sendMail', function(req, res) {
//req.header("Access-Control-Allow-Origin", "*");
//res.header("Access-Control-Allow-Origin", "*");
//res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
//next();
console.log("Button pressed :D");
res.json({ "A": "value"});
//run code here
});
app.listen(8081);
运行node mail.js &启动,apache服务器使用systemctl restart httpd.service启动
button.html
<!DOCTYPE html>
<html>
<head>
<title> some title</title>
</head>
<body>
<div>
<button id="some-long-stupid-unique-name" class="btn-default btn-sm back_to_options">Test</button>
</div>
</body>
</html>
但是,在 Firefox 中,每当我点击测试按钮时,我都会看到 Cross-Origin Request Blocked: The Same Origin Policy diallows reading the remote resource at http://localhost:8081/sendMail. (Reason CORS request did not succeed.)
我一生都无法弄清楚我做错了什么:/
我假设我需要将节点配置为接受 cors,但我尝试的次数越多,我想知道这是否不正确,我实际上需要在 apache 中修复它?
iptables 中的简单防火墙是否也会影响这一点?
编辑 1:更新 mail.js
编辑 2:更新 mail.js
编辑 3:更新 mail.js
【问题讨论】:
-
我认为端口号不同,因为它不被视为同源。所以我假设 apache 正在监听 80,而您正在向 8081 发送一个发布请求,在这种情况下,请确保“cors”实际上发送了标题“Access-Control-Allow-Origin:*”。检查网络选项卡上是否存在此标头。如果不存在,则需要添加它。
-
hmmmm 它看起来不像出现在网络选项卡中,这是我一直在使用的指南npmjs.com/package/cors,我真的没有看到任何我可以指定使用发送特定标头的地方科斯。我可以为此推动正确的方向吗?
-
从 express.js 方面,你需要设置它,我猜是这样的:
req.headers['Access-Control-Allow-Origin'] = '*'。搜索设置请求标头。请注意,HTTP 标头大小写不敏感。 -
@ibrahimtanyalcin 我已将原始帖子更新为我目前拥有的内容,但我仍然没有在网络选项卡中看到标题:/
-
这可以帮助您似乎需要两个标题:dzone.com/articles/cors-in-node
标签: javascript node.js apache cors