2011-09-22 136 views
0

我正在编写像我的应用程序可以显示状态更新和聊天的社交网络应用程序。当我在互联网上搜索时,我发现node.js为长轮询技术,我想我可以在我的应用程序中使用聊天和流媒体页面。但是当我使用Node.js的,我有一个堆栈如何通过node.js获取codeigniter会话

这是一个技术,我想我的项目: 1)我是在本地主机地址使用笨的框架和MySQL数据库:81/myproject的 2),并使用Node.js的港口127.0.0.1:8080聊天和流媒体页面

这是编写JavaScript代码服务器的nod​​e.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格式也和我没有使用会话这是工作我可以得到身体的反应..如果这个问题是会议如何我可以解决这个问题?..这是可以让我感到困惑..感谢您的意见

回答

0

很难说,但我会主要尝试发送一个jSON对象而不是直接数组。即将数组封装到一个对象中:

{"data":[…]} 

这个“可能”导致了解析错误。

别的东西,为了这个目的,它不会坏到以下添加到您回应PHP方法:

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json'); 
+0

我想在我的JSON是没有问题的。因为我可以分析that.i尝试你的建议添加头缓存控制,过期,和content-type.but当我执行“节点test.js”是相同的错误...当我检查头响应我发现重定向位置登录页面。 – viyancs

+0

数组本身在语法上是正确的,但是在返回一个数组而不是一个对象时,我已经得到了和你一样的问题,于是我不得不封装它,因为我建议在上面这样做。 –

+0

我试着改变我的json格式,像你的suggent,但保持错误.. – viyancs