首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在条件中间件中使用Node.js快捷会话?

如何在条件中间件中使用Node.js快捷会话?
EN

Stack Overflow用户
提问于 2015-05-07 20:35:36
回答 1查看 907关注 0票数 1
代码语言:javascript
复制
var express = require('express')
var parseurl = require('parseurl')
var session = require('express-session')

var app = express()


app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true
}))

这是我的简单密码。但是,我只想在req.url包含/web的情况下使用会话。有什么方法可以将它封装在我自己的中间件中吗?

我试过:

代码语言:javascript
复制
function setSession(req,res,next){
    if(req.url.indexOf('/api') != 0){
        app.use(session({
            secret: 'keyboard cat',
            resave: false,
            saveUninitialized: true
        }));
        next();
    }else{
        next();
    }
};

然后

代码语言:javascript
复制
app.use(setSession);

但是在我的控制器中设置req.session.hello = "world"会给出:TypeError: Cannot set property 'hello' of undefined。简单地说,这是行不通的。在我的中间件中,我的论点是否错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-07 21:19:21

但是,我只想在req.url包含/web的情况下使用会话。有什么方法可以将它封装在我自己的中间件中吗?

你当然可以。您可以使用express.Router创建子路由,如下所示:

代码语言:javascript
复制
var sessionMiddleware = session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true
});

var webRoutes = express.Router()
    .get('/', function(req, res, next) {
        res.send('I have a session!');
    });

var nonWebRoutes = express.Router()
    .get('/', function(req, res, next) {
        res.send('No session here');
    });


app.use('/web', express.Router()
    .use(sessionMiddleware)
    .use(webRoutes));

app.use('/nonweb', nonWebRoutes);

编辑:

但是,如果您想有条件地执行中间件函数,可以这样做:

代码语言:javascript
复制
app.use(function(req, res, next) {
    if (req.url.indexOf('/api') !== 0) {
        sessionMiddleware(req, res, next);
    } else {
        next();
    }
});

app.get('/api', function(req, res, next) {
    res.send(!!req.session); //false
});

app.get('/web', function(req, res, next) {
    res.send(!!req.session); //true
});

但是我更喜欢子路由方法,因为它将您的路径路由结构映射到一个层次结构中,这使得代码更容易阅读,并且更容易合并其他使用会话的中间件,例如passport.js。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30111172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档