簡體   English   中英

如何使用node.js從Codeigniter獲取會話

[英]how to get session from codeigniter with node.js

我正在編寫類似社交網絡的應用程序,其中我的應用程序中可以顯示狀態更新和聊天。 當我在互聯網上搜索時,我發現了用於長期輪詢技術的node.js,我認為我可以將其用於應用程序中的聊天和流媒體頁面。 但是當我使用node.js時我有一個堆棧

這是我想在我的項目中使用的一項技術:1)我在地址localhost:81 / myproject中將codeigniter用於框架和mysql數據庫2)在端口127.0.0.1:8080中使用node.js進行聊天和流式處理頁面

這是代碼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/");

現在在codeigniter端,我在url http:// localhost:81 / myproject / getUser上進行web服務,響應為json格式,如果沒有重定向到登錄頁面,我將通過會話auhtentication訪問它。

[{"user_id":"2a20f5b923ffaea7927303449b8e76daee7b9b771316488679","token":"3m5biVJMjkCNDk79pGSo","username":"rakhacs","password":"*******","name_first":"rakha","name_middle":"","name_last":"cs","email_id":"email@gmail.com","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":"email1@gmail.com","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

但是當我使用另一個也已經響應json格式的Web服務並且不使用會話時,我可以得到主體響應..如果這個問題是會話,我該如何解決呢?..這會使我感到困惑..謝謝你的評論

很難說,但我會主要嘗試在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');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM