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

Posted

技术标签:

【中文标题】jQuery AJAX 到节点服务器抛出 net::ERR_CONNECTION_REFUSED【英文标题】:jQuery AJAX to node server throws net::ERR_CONNECTION_REFUSED 【发布时间】:2016-04-16 08:49:43 【问题描述】:

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

此外,有些人在使用 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(); 
);

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

【问题讨论】:

【参考方案1】:

data: JSON.stringify(testdata),

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

【讨论】:

还有哪些有用的信息?我明天试试这个解决方案,我今晚正忙于另一个项目。 尝试将res.header('Access-Control-Allow-Origin', "*"); 更改为 res.header('Access-Control-Allow-Origin', true); . 这两种方法我都试过了,错误信息没有改变。 好吧,如果你真的弄明白了,你能发布解决方案吗? 当然,不过希望我能找到一些帮助,因为这对我来说一直是个问题。

以上是关于jQuery AJAX 到节点服务器抛出 net::ERR_CONNECTION_REFUSED的主要内容,如果未能解决你的问题,请参考以下文章

从节点 JavaScript 返回到 jQuery 的 Ajax 调用落在错误函数上

当 WCF 方法抛出异常时,使用空响应调用 jQuery 成功回调

通过 PageMethods 和 AJAX 调用将 JQuery 脚本错误记录到 ASP.NET 服务器

jQuery Ajax 发布 - 404 错误

带有 Ajax 函数的 jQuery 数据表在 ajax.reload() 上抛出错误

jQuery .ajax() POST 请求抛出 405(不允许的方法)但 GET 不会