如何在条件中间件中使用Node.js Express会话?

杰森·霍尔姆(Jason Holm)
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.urlcontains时使用会话/web有什么办法可以将其包装在我自己的中间件中?

我试过了:

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

进而

app.use(setSession);

但是req.session.hello = "world"在我的控制器中进行设置可以得到:TypeError: Cannot set property 'hello' of undefined简而言之,它是行不通的。我的论据在我的中间件中是错误的吗?

安德鲁·拉弗斯(Andrew Lavers)

但是,我只想在req.url包含/ web时使用会话。有什么办法可以将其包装在我自己的中间件中?

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

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);

编辑:

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

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。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在条件中间件中使用Node.js Express-session?

来自分类Dev

如何在发布路线上模拟Express / Node.js中间件?

来自分类Dev

如何在中间件中使用 firebase 作为 node.js 的登录身份验证?

来自分类Dev

在使用 node.js 和 Express 构建的 api 中使用 cors 中间件时出现 CORS 错误

来自分类Dev

如何使用Node.js,Express和不太中间件来编译2种以上的LESS样式?

来自分类Dev

如何使用Node.js,Express和更少中间件来编译2种以上的LESS风格?

来自分类Dev

游戏与node.js / express的会话数

来自分类Dev

在Node.js / Express中连接中间件

来自分类Dev

无法使用 express js 检索会话

来自分类Dev

使用Stylus和CoffeeScript中间件是否会降低Node.js Express应用的速度?

来自分类Dev

对 Express / Node.js 使用 favicon 中间件有什么好处?

来自分类Dev

如何在Node.js Express中检查会话?

来自分类Dev

如何在express.js中制作中间件的动态链

来自分类Dev

Slim 2:如何在中间件中使用会话cookie?

来自分类Dev

如何检查正在使用的Express.js中间件集?

来自分类Dev

如何检查正在使用的Express.js中间件集?

来自分类Dev

如何在Sails.js中使用自定义路由中间件?(ExpressJS)

来自分类Dev

如何在Sails.js中使用自定义路由中间件?(ExpressJS)

来自分类Dev

在Koa中使用Express中间件

来自分类Dev

如何在express.js中启用会话

来自分类Dev

如何将中间件路由器用于Express Node.js中的子路径

来自分类Dev

使用 Passport 和 Express JS 登录后如何保存会话?

来自分类Dev

如何在Express中将粘性会话与集群一起使用-Node JS

来自分类Dev

要求Node.js / Express.js中间件没有方法'...'

来自分类Dev

与Node.js Express共享Laravel 4会话

来自分类Dev

与Node.js Express共享Laravel 4会话

来自分类Dev

NodeJS(Express.js):如何使会话成为全局

来自分类Dev

如何在django中使用中间件同时处理基于会话和基于令牌的身份验证?

来自分类Dev

如何在django中使用中间件同时处理基于会话和基于令牌的身份验证?

Related 相关文章

  1. 1

    如何在条件中间件中使用Node.js Express-session?

  2. 2

    如何在发布路线上模拟Express / Node.js中间件?

  3. 3

    如何在中间件中使用 firebase 作为 node.js 的登录身份验证?

  4. 4

    在使用 node.js 和 Express 构建的 api 中使用 cors 中间件时出现 CORS 错误

  5. 5

    如何使用Node.js,Express和不太中间件来编译2种以上的LESS样式?

  6. 6

    如何使用Node.js,Express和更少中间件来编译2种以上的LESS风格?

  7. 7

    游戏与node.js / express的会话数

  8. 8

    在Node.js / Express中连接中间件

  9. 9

    无法使用 express js 检索会话

  10. 10

    使用Stylus和CoffeeScript中间件是否会降低Node.js Express应用的速度?

  11. 11

    对 Express / Node.js 使用 favicon 中间件有什么好处?

  12. 12

    如何在Node.js Express中检查会话?

  13. 13

    如何在express.js中制作中间件的动态链

  14. 14

    Slim 2:如何在中间件中使用会话cookie?

  15. 15

    如何检查正在使用的Express.js中间件集?

  16. 16

    如何检查正在使用的Express.js中间件集?

  17. 17

    如何在Sails.js中使用自定义路由中间件?(ExpressJS)

  18. 18

    如何在Sails.js中使用自定义路由中间件?(ExpressJS)

  19. 19

    在Koa中使用Express中间件

  20. 20

    如何在express.js中启用会话

  21. 21

    如何将中间件路由器用于Express Node.js中的子路径

  22. 22

    使用 Passport 和 Express JS 登录后如何保存会话?

  23. 23

    如何在Express中将粘性会话与集群一起使用-Node JS

  24. 24

    要求Node.js / Express.js中间件没有方法'...'

  25. 25

    与Node.js Express共享Laravel 4会话

  26. 26

    与Node.js Express共享Laravel 4会话

  27. 27

    NodeJS(Express.js):如何使会话成为全局

  28. 28

    如何在django中使用中间件同时处理基于会话和基于令牌的身份验证?

  29. 29

    如何在django中使用中间件同时处理基于会话和基于令牌的身份验证?

热门标签

归档