Javascript node.js/jQuery跨域:错误\连接\被拒绝

Javascript node.js/jQuery跨域:错误\连接\被拒绝,javascript,node.js,express,Javascript,Node.js,Express,我是Node.js的新手 我正在创建一个简单的node/express应用程序,它服务于一个包含一个按钮的网页,当单击该按钮时,它会向一个express路由发出jQuery ajax请求 路由回调向openexchangerates.org发出http.get请求,请求获取一些包含汇率的json数据。JSON然后被输出到开发者工具控制台窗口 应用程序在第一次单击按钮时工作,但在任何后续单击时,控制台窗口显示: GET http://127.0.0.1:3000/getFx net::ERR_CO

我是Node.js的新手

我正在创建一个简单的node/express应用程序,它服务于一个包含一个按钮的网页,当单击该按钮时,它会向一个express路由发出jQuery ajax请求

路由回调向openexchangerates.org发出http.get请求,请求获取一些包含汇率的json数据。JSON然后被输出到开发者工具控制台窗口

应用程序在第一次单击按钮时工作,但在任何后续单击时,控制台窗口显示:

GET http://127.0.0.1:3000/getFx net::ERR_CONNECTION_REFUSED
Developer Tools控制台窗口的屏幕抓取显示第一次单击的结果,然后在连接被拒绝时显示第二次单击的结果

错误详细信息如下:

GET http://127.0.0.1:3000/getFx net::ERR_CONNECTION_REFUSED    jquery-2.1.3.min.js:4
n.ajaxTransport.k.cors.a.crossDomain.send    jquery-2.1.3.min.js:4   
n.extend.ajax           (index):18
(anonymous function)    jquery-2.1.3.min.js:3
n.event.dispatch        jquery-2.1.3.min.js:3
n.event.add.r.handle
我的简单Node/Express应用程序如下所示:

GET http://127.0.0.1:3000/getFx net::ERR_CONNECTION_REFUSED    jquery-2.1.3.min.js:4
n.ajaxTransport.k.cors.a.crossDomain.send    jquery-2.1.3.min.js:4   
n.extend.ajax           (index):18
(anonymous function)    jquery-2.1.3.min.js:3
n.event.dispatch        jquery-2.1.3.min.js:3
n.event.add.r.handle
var express=require('express');
var-app=express();
var http=require(“http”);
var数据=”;
var-json;
log(“\uuuu dirname”,“\uuuu dirname”);
应用程序使用(express.static(u dirname+'/');
变量选项={
主持人:“openexchangerates.org”,
路径:“/api/latest.json?app_id=”
};
应用程序获取(“/”,函数(请求,恢复){
res.sendFile('index.html',{root:uu dirname});
})
app.get(“/getfx”,函数(req,res){
控制台日志(“路由:getFx”);
getFx(res);
})
函数getFx(res){
log(“http getFx”);
get(选项、函数(响应){
关于(“数据”,函数(块){
//log(“数据:\n”+区块);
数据+=块;
});
响应。on(“结束”,函数(){
json=json.parse(数据);
log(“http响应结束:”);
res.end(数据);
});
响应。on(“错误”,函数(e){
console.log(“错误:\n”+e.message);
});
})
}

app.listen(3000)问题来自使用chrome的本地主机上发生的跨源请求保护。尝试使用其他浏览器,或仅允许所有主机(*)或您的主机()使用原点:


您定义
数据
json
变量的方式导致后续请求失败。因为您预先定义了它们,所以所有请求都将重复使用它们,这意味着在您对第二个请求执行JSON.parse
data
时,
data
将包含两个有效的JSON字符串,从而使一个JSON字符串无效。要解决这一问题,请在回调的更深处定义
data
json

var express = require('express');
var app = express();
var http = require("http");
//var data = "";
//var json;

console.log( "__dirname", __dirname );
app.use( express.static( __dirname + '/') );

var options = {
  host:"openexchangerates.org",
  path:"/api/latest.json?app_id=<get free ID from openexchangerates.org>"
};

app.get("/", function( req, res ) {
  res.sendFile('index.html', { root: __dirname });
})

app.get("/getfx", function(req, res) {
  console.log("Route: getFx");
  getFx(res);
})

function getFx(res) {
  console.log("http getFx");
  http.get(options, function (response) {
    var data = "";
    var json;
    response.on("data", function (chunk) {
      //console.log("data:\n"+chunk);
      data += chunk;
    });
    response.on("end", function () {
      console.log("http response end:");
      json = JSON.parse(data);
      res.json(json);
    });
    response.on("error", function (e) {
      console.log("error:\n" + e.message);
    });
  })
}

app.listen(3000);
var express=require('express');
var-app=express();
var http=require(“http”);
//var数据=”;
//var-json;
log(“\uuuu dirname”,“\uuuu dirname”);
应用程序使用(express.static(u dirname+'/');
变量选项={
主持人:“openexchangerates.org”,
路径:“/api/latest.json?app_id=”
};
应用程序获取(“/”,函数(请求,恢复){
res.sendFile('index.html',{root:uu dirname});
})
app.get(“/getfx”,函数(req,res){
控制台日志(“路由:getFx”);
getFx(res);
})
函数getFx(res){
log(“http getFx”);
get(选项、函数(响应){
var数据=”;
var-json;
关于(“数据”,函数(块){
//log(“数据:\n”+区块);
数据+=块;
});
响应。on(“结束”,函数(){
log(“http响应结束:”);
json=json.parse(数据);
res.json(json);
});
响应。on(“错误”,函数(e){
console.log(“错误:\n”+e.message);
});
})
}
app.listen(3000);

您的控制台在说什么(或节点的任何日志)?@maque感谢您的回复。错误详细信息现在位于图像下方。您的标题有点误导。此错误与跨域请求关系不大。或者快车。或者jquery。如果有误导性,请道歉。这是控制台窗口中列出的错误。由于我的节点技能还处于初级阶段,我渴望了解我做错了什么。我会尽快修改标题,只要我最了解如何使用它…一个问题从这里开始:
var data=“”并在使用后未清空时结束
JSON.parse(数据)应在第二个请求上引发错误<代码>数据
应该在绑定到数据和结束事件之前在请求回调中定义。您的
json
var也是如此。我建议将json.parse包装在一个try-catch中,因为它来自第三方api,您永远不知道。