一直專心於寫代碼,遇到問題便看別人的博客來解決問題,忽然感受本身也應該寫點東西幫助別人來解決問題。廢話很少說了,直接切入正題~node
最近在寫一個聊天室來學習node和socket相關知識。遇到的問題描述:ajax請求能夠經過express-session來parse出目前用戶,但socket請求我也想驗證是不是登陸用戶,這個怎麼作呢?ajax
這個問題我在網上查了不少資料,大多都寫的很是複雜,後來經本身實踐,其實只須要給io加一個跟express用的中間件同樣就能夠了,能parse出來徹底同樣的user。一行代碼賽過千言萬語。附上兩個middleware的代碼(路徑自行調整):mongodb
本例使用mongodb存儲session, 使用到了connect-mongodb-session插件。express
1. ajax用的中間件npm
var session = require('express-session'); var MongoDBStore = require('connect-mongodb-session')(session); var dbSettings = require('../db/settings'); module.exports = session({ secret: dbSettings.COOKIE_SECRET, cookie: { maxAge: 1000 * 60 * 60 * 24 * 7 // 1 week }, store: new MongoDBStore({ uri: `mongodb://${dbSettings.HOST}:${dbSettings.PORT}/${dbSettings.DB}`, collection: 'mySessions' }), // Boilerplate options, see: // * https://www.npmjs.com/package/express-session#resave // * https://www.npmjs.com/package/express-session#saveuninitialized resave: true, saveUninitialized: true });
引用該中間件方式(細節請自行補充):cookie
var app = express(); var sessionMiddleware = require('./middleware/sessionMiddleware'); app.use(sessionMiddleware);
2. io用的中間件session
var sessionMiddleware = require('./sessionMiddleware'); module.exports = function(socket, next) { sessionMiddleware(socket.handshake, {}, next); };
引用該中間件方式:app
var socketIO = require('socket.io'); var ioSessionMiddleware = require('../middleware/ioSessionMiddleware'); var ioServer = socketIO(server); ioServer.use(ioSessionMiddleware); ioServer.on('connection', function(socket) { let session = socket.handshake.session; }