簡體   English   中英

節點JS Express端口

[英]Node JS Express Ports

我正在使用redis將會話cookie從PHP發送到Node / Express。 我似乎能夠訪問server.js代碼中的cookie的唯一方法是,如果我在客戶端上創建了一個空文件並將其包含在端口中,如下所示:

<script type="text/javascript" src="http://dev.nodetest.com:8080/empty.js"></script>

如果我不在客戶端上包含此數據,則無法訪問節點服務器上的cookie數據。

我的要求是,我不需要將cookie發送回客戶端。 僅在server.js中訪問它以針對數據庫對用戶進行身份驗證。

這是我的server.js文件的內容:

var express = require('express'),
    http = require('http'),
    app = express(),
    server = http.createServer(app),
    io = require('socket.io').listen(8081),
    cookieParser = require('cookie-parser'),
    session = require('express-session'),
    RedisStore = require('connect-redis')(session);

app.use(cookieParser());

app.use(session({
    store: new RedisStore({
        // this is the default prefix used by redis-session-php
        prefix: 'session:php:'
    }),
    // use the default PHP session cookie name
    name: 'PHPSESSID',
    secret: 'node.js rules'
}));

app.use(function(req, res, next) {
    console.log(req.session);
    req.session.nodejs = 'Hello from node.js!';
    res.send();
});

io.sockets.on('connection', function (socket) {
    socket.on('subscribe', function(room) {
        console.log('joining room', room);
        socket.join(room);
    });
});

app.listen(8080);

您正在下面的快速中間件中打印會話信息:

app.use(function(req, res, next) {
    console.log(req.session);
    req.session.nodejs = 'Hello from node.js!';
    res.send();
});

僅當您發出普通的http請求(將其解釋為快速請求)時才調用此中間件。 當您使用socket.io進行交易時,上述代碼將永遠不會執行(例如,連接套接字,發送消息,斷開連接等)。

index.php生成一個cookie和一個頁面,該頁面包含一個連接到socket.io並向其發出消息的腳本。 當您這樣做時,不會執行上述中間件。 但是,當您生成“正常請求”時,將執行上述中間件。 這就是為什么在腳本中包含Empty.js時執行中間件的原因:

<script type="text/javascript" src="http://dev.nodetest.com:8080/empty.js"></script>

實際上,這將針對任何請求執行,例如。 http://dev.nodetest.com:8080/foobarhttp://dev.nodetest.com:8080/anotherfoobar 該URL無需指向現有文件。 端口8080上的任何URL都將調用中間件。 但是SOCKET.IO的請求永遠不會觸發您的測試中間件。

編輯有些庫可以幫助您處理socket.io中的會話。 sessio.socket.io似乎適合您的情況。

暫無
暫無

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

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