jQuery AJAX到节点服务器抛出net :: ERR_CONNECTION_REFUSED

我已经禁用了我的防火墙(ufw在Ubuntu 15.04服务器上)。 这似乎是这个问题最常见的原因。

另外有些人在使用AJAX时遇到问题,所以我尝试了ajax和https POST请求。 我的代码如下:

jQuery发出请求:

testData = { email : address, subject : subject, body : body, meetingId : meetingId }; testData = JSON.stringify(testData); $.ajax({ url: "https://localhost:3000/sendICSInvite", contentType: "application/json; charset=utf-8", data: testData, type: "POST", success: function(result) { console.log("request might have worked"); console.log(result); }, error: function (err) { console.log(err); } }); 

到路线:

 var api = require("../controllers/main.js"); //API ROUTES module.exports = function(app){ app.post('/sendICSInvite', api.sendEmail); }; 

控制器:

 module.exports.sendEmail = function (req, res) { console.log("sending Email (probably not actually)"); }); 

这可以通过邮递员调用并且完美地工作。 但是,当我从jQuery进行调用时,它会失败并返回错误:

 OPTIONS https://localhost:3000/sendICSInvite?email=myemail%40myprovider.com&subject=TE…+emails&body=Just+testing+the+function+for+autmoated+email&meetingId=33033 net::ERR_CONNECTION_REFUSEDsend @ jquery.js:4m.extend.ajax @ jquery.js:4sendEmail @ caseman.js:706(anonymous function) @ VM4606:2InjectedScript._evaluateOn @ VM4491:875InjectedScript._evaluateAndWrap @ VM4491:808InjectedScript.evaluate @ VM4491:664 

似乎与OPTIONS请求有关(我不知道这是在哪里发送的,我在我的ajax中选择了POST类型),这导致我在我的节点服务器中提出这个建议的解决方案:

 app.use(function(req, res, next) { res.header('Access-Control-Allow-Origin', "*"); res.header('Access-Control-Allow-Methods',"GET,PUT,POST,DELETE,OPTIONS"); res.header('Access-Control-Allow-Headers', "*"); next(); }); 

但即使使用此中间件function,错误也保持不变。 节点服务器使用VMware Workstation在虚拟机上的端口3000上运行,并运行Ubuntu 15.04服务器版。 包含我想发出此请求的jQuery的网站是通过端口80上的Perl脚本提供的。

data: JSON.stringify(testdata),

那可能是你的问题。 您需要序列化您的json对象。 你需要在选项中将.ajax调用设置为POST类型,否则它将默认为get。