CORS节点js和apache服务器

时间:2019-05-15 19:32:27

标签: javascript node.js apache cors

我目前正在将网站托管在apache服务器上(如果这样做的话,可以放在拱顶上)。我需要的是能够在单击网页之一上的按钮之后调用一个小的小节点脚本(最终将发送电子邮件)。

当前工作方式如下

clientside.js

$('#some-long-stupid-unique-name').click(function(){
$.ajax({
    type: 'POST',
    url: 'http://localhost:8081/sendMail'
});
});

mail.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

1 个答案:

答案 0 :(得分:0)

您有四个本不应该拥有的东西,却缺少了您需要的一件事:


以下内容是多余的。您正在使用CORS中间件模块。

删除这些。

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

…在编写中间件时使用。不是端点。它将引发500错误,这会使CORS测试失败。

删除它。


现在,您需要使端点以某种方式响应请求。

如果没有响应,则由CORS模块设置的响应头将毫无意义。

app.post('/sendMail', function(req, res) {
    console.log("Button pressed :D");
    res.json({ "some": "data"});
});