我正在编写像我的应用程序可以显示状态更新和聊天的社交网络应用程序。当我在互联网上搜索时,我发现node.js为长轮询技术,我想我可以在我的应用程序中使用聊天和流媒体页面。但是当我使用Node.js的,我有一个堆栈如何通过node.js获取codeigniter会话
这是一个技术,我想我的项目: 1)我是在本地主机地址使用笨的框架和MySQL数据库:81/myproject的 2),并使用Node.js的港口127.0.0.1:8080聊天和流媒体页面
这是编写JavaScript代码服务器的node.js的名字是server.js
var sys = require("sys"),
http = require("http"),
url = require("url"),
path = require("path"),
fs = require("fs"),
events = require("events");
function load_static_file(uri, response) {
var filename = path.join(process.cwd(), uri);
path.exists(filename, function(exists) {
if(!exists) {
response.writeHead(404, {"Content-Type": "text/plain"});
response.write("404 Not Found\n");
response.end();
return;
}
fs.readFile(filename, "binary", function(err, file) {
if(err) {
response.writeHead(500, {"Content-Type": "text/plain"});
response.write(err + "\n");
response.end();
return;
}
response.writeHead(200);
response.write(file, "binary");
response.end();
});
});
}
var local_client = http.createClient(81, "localhost");
var local_emitter = new events.EventEmitter();
function get_users() {
var request = local_client.request("GET", "/myproject/getUser", {"host": "localhost"});
request.addListener("response", function(response) {
var body = "";
response.addListener("data", function(data) {
body += data;
});
response.addListener("end", function() {
var users = JSON.parse(body);
if(users.length > 0) {
local_emitter.emit("users", users);
}
});
});
request.end();
}
setInterval(get_users, 5000);
http.createServer(function(request, response) {
var uri = url.parse(request.url).pathname;
if(uri === "/stream") {
var listener = local_emitter.addListener("users", function(users) {
response.writeHead(200, { "Content-Type" : "text/plain" });
response.write(JSON.stringify(users));
response.end();
clearTimeout(timeout);
});
var timeout = setTimeout(function() {
response.writeHead(200, { "Content-Type" : "text/plain" });
response.write(JSON.stringify([]));
response.end();
local_emitter.removeListener(listener);
}, 10000);
}
else {
load_static_file(uri, response);
}
}).listen(8383);
sys.puts("Server running at http://localhost:8383/");
现在笨身边,我的网址http://localhost:81/myproject/getUser使得web服务与响应是JSON格式,我访问这与会话auhtentication如果不是重定向吨o登录页面。
[{"user_id":"2a20f5b923ffaea7927303449b8e76daee7b9b771316488679","token":"3m5biVJMjkCNDk79pGSo","username":"rakhacs","password":"*******","name_first":"rakha","name_middle":"","name_last":"cs","email_id":"[email protected]","picture":"img\/default.png","active":"1","online":"0","created_at":"2011-09-20 11:14:43","access":"2","identifier":"ae70c3b56df19a303a7693cdc265f743af5b0a6e"},{"user_id":"9a6e55977e906873830018d95c31d2bf664c2f211316493932","token":"RoUvvPyVt7bGaFhiMVmj","username":"ferdian","password":"*****","name_first":"willy","name_middle":"","name_last":";f;w","email_id":"[email protected]","picture":"img\/default.png","active":"1","online":"0","created_at":"2011-09-20 11:47:20","access":"2","identifier":"1ccd4193fa6b56b96b3889e59c5205cc531177c9"}]
这是一点问题,当我执行node server.js
我得到错误这样undefined:0 sysntaxerror:unexpected end of input at object.parse(native)
我不知道这个错误我想是因为我使用会话?但我不确定。 当我测试使用test.js测试我的web服务
var http = require("http")
var options = {
host: 'localhost',
port: 81,
path: '/myproject/getUser',
method: 'GET'
};
var req = http.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
// write data to request body
req.write('data\n');
req.write('data\n');
req.end();
,这是输出
problem with request: parse error
但是当使用其他web服务谁一直响应JSON格式也和我没有使用会话这是工作我可以得到身体的反应..如果这个问题是会议如何我可以解决这个问题?..这是可以让我感到困惑..感谢您的意见
我想在我的JSON是没有问题的。因为我可以分析that.i尝试你的建议添加头缓存控制,过期,和content-type.but当我执行“节点test.js”是相同的错误...当我检查头响应我发现重定向位置登录页面。 – viyancs
数组本身在语法上是正确的,但是在返回一个数组而不是一个对象时,我已经得到了和你一样的问题,于是我不得不封装它,因为我建议在上面这样做。 –
我试着改变我的json格式,像你的suggent,但保持错误.. – viyancs