【发布时间】:2013-05-09 09:23:24
【问题描述】:
世界! 我正在尝试通过我的 node/socket.io 服务器向我的客户端获取 JSON 提要。 我一直在本地或远程(使用nodejitsu)得到以下错误: XMLHttpRequest 无法加载 http://jsonfeed.url。 Access-Control-Allow-Origin 不允许来源http://example.com。
根据我的研究和测试,它不依赖于我的浏览器,而是依赖于我的服务器代码。请赐教!
服务器代码(我可以提供更多,但尽量简洁):
var fs = require('fs'),
http = require('http');
//use of a fs and node-static to serve the static files to client
function handler(request, response) {
"use strict";
response.writeHead(200, {
'Content-Type': 'text/html',
'Access-Control-Allow-Origin' : '*'});
fileServer.serve(request, response); // this will return the correct file
}
var app = http.createServer(handler),
iosocks = require('socket.io').listen(app),
staticserv = require('node-static'); // for serving files
// This will make all the files in the current folder
// accessible from the web
var fileServer = new staticserv.Server('./');
app.listen(8080);
就是这样,我什么都试过了……是时候召唤天才了!
【问题讨论】:
-
你缺少一个 ;在
http = require('http');上,除非这只是部分代码:) -
是的,部分代码 ^^ 服务器运行良好,除了 getJSON 之外,我用它做的所有事情。谢谢,为清楚起见进行了编辑!
-
你有没有想过用
Express v3代替普通的Node.js,它会让你的生活变得更轻松。我在使用 Express 时从来没有遇到过这个问题,我不知道它处理事情有多大不同,但就像我说的,我的套接字没有出现这个错误 -
不幸的是我不能。在使用 express 之前,我已经让自己完全理解节点,而我的 500 行代码迟到改变主意。 (不会犯同样的错误两次...)
-
这听起来像是一个简单的 XSS 错误。您确定客户端上发出 AJAX 请求的 javascript 文件是从与您尝试访问的 AJAX url 相同的域(包括子域)加载的?基本上没有任何前端代码很难知道这里发生了什么。
标签: javascript node.js socket.io cors