【问题标题】:Session management in NodejsNodejs 中的会话管理
【发布时间】:2016-04-22 16:40:21
【问题描述】:

我是 NodeJS 的初学者。刚刚开始了一个简单的项目,我需要一个会话管理概念。那么如何在 NodeJS 应用程序中管理会话。

在我的项目中有两个文件:- app.js 和 routes.js。

那么我们在哪里添加会话以及如何添加??

app.js 文件:-

var express = require('express'),
    app = express(),
    path = require('path');


app.set('views', path.join(__dirname , 'views'));
 
app.engine('html', require('hogan-express'));   
  
app.set('view engine', 'html');
  
app.use(express.static(path.join(__dirname,'public')));

require('./routes/routes.js')(express,app);

app.listen (3000 , function(){
    console.log("working on the Port 3000"); 
   
 });

和 routes.js 文件:-

module.exports = function(express, app){
    
    var router = express.Router();
    
    router.get('/', function(req , res , next){
       res.render('index',{title: 'Welcome'}); 
    });
    
  }

【问题讨论】:

  • 没有内置会话,您必须为此使用middleware

标签: javascript node.js session


【解决方案1】:

我不建议您尝试建立自己的会话并使用 https://github.com/expressjs/session 代替它与 express 一起使用。

【讨论】:

    【解决方案2】:

    对于会话管理,我们需要一个中间件“cookie-parser”。以前它是 express 的一部分,但在 express 4.0 之后它是一个单独的模块。

    所以要访问我们需要在项目中安装的cookie解析器:

    npm install cookie-parser --save

    然后将其添加到您的 app.js 文件中:

    var cookieParser = require('cookie-parser');
    
     app.use(cookieParser()); 

    然后我们需要会话模块。所以首先安装会话模块:

    npm install express-session --save

    然后启用会话。我们在 app.js 文件中添加以下代码。

    app.use(session({secret:config.sessionSecret, saveUninitialized : true, resave : true}));

    然后来到 routes.js 文件:-

    让我们假设有一个会话变量 favColor。现在使用会话设置颜色并进入另一个页面。代码看起来像:-

    router.get('/setColor', function(req , res , next){
            req.session.favColor = 'Red';
            res.send('Setting favourite color ...!');
        });
        
        router.get('/getColor', function(req , res , next){
            res.send('Favourite Color : ' + (req.session.favColor == undefined?"NOT FOUND":req.session.favColor));
        });

    这是关于会话管理的全部内容。我们还可以了解有关会话的更多信息:- This Reference

    【讨论】:

    • 写得真棒,感谢您帮助我。它正在工作。我喜欢你的回答。
    【解决方案3】:

    2019年更新,使用express-session 1.15.6(1.5以后不需要使用cookie-parser,session可以直接读写cookie。)

    在 app.js 中:

    const app = express()
    const session = require('express-session');
    const options = {
      name: 'foo', // Default is connect.sid
      store: this.store, // Default is memoryStore, which is for dev only. Setup redis or memcached for prod
      secret: 'bar', // Required, used to sign session id cookie
      saveUninitialized: true, // Forces a session that is "uninitialized" to be saved to the store
      resave: false, //Forces the session to be saved back to the session store
      rolling: true //Force a session identifier cookie to be set on every response
    };
    // Session method will return a middleware function.
    const middleware = session(options);
    // Now we can make use of session in all the requests
    app.use(middleware)
    

    在 routes.js 或为特定路由创建的任何处理程序文件中:

    handler1(req, res, next) {
      req.session.someField = 'foo';
      // Use save method to update the store immediately, if there's other AJAX call pending. 
      req.session.save();
    }
    
    handler2(req, res, next) {
      console.log(req.session.someField); 
    }
    
    handler3(req, res, next) {
      // we use delete operator here.
      delete req.session.someField; 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 2011-04-03
      • 1970-01-01
      • 2010-10-29
      • 2018-08-27
      相关资源
      最近更新 更多