【问题标题】:How do I write my Express session inside custom middleware?如何在自定义中间件中编写我的 Express 会话?
【发布时间】:2015-01-29 22:59:44
【问题描述】:

这是我当前的代码:

var express = require('express');
app.configure(function(){
    app.use(express.static(_settings.c.WEB_PATH + '/public'));
    app.use(_mods.web.mware.rawBody);
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.methodOverride());
    app.use(express.session({
            cookie:{ domain:"."+_settings.c.SITE_DOMAIN, maxAge:1440009999},
            secret:'password',
            store: r_store,
            }));
    //other middleware here

});

我想用自定义中间件(在另一个文件中)替换会话部分。 我将取出会话部分并将其放入:

var helper = require('helper.js');
app.use(helper.setSession);

在那个文件中,我有这个:

var express = require('express');
function setSession(req,res,next){
    express.session({
    cookie:{ domain:"."+_settings.c.SITE_DOMAIN, maxAge:1440009999},
    secret:'password',
    store: r_store,
    }) 
    next();
};  
exports.setSession = setSession;

但是,当我运行它时,会话没有连接。我不知道如何调试它。

【问题讨论】:

  • 我可能误解了我在看什么,但我认为您不会每次都想运行express.session,不是吗?
  • 不。我只想在某些场合运行它。
  • 不,我的意思是express.session 返回一个中间件函数。在这里,您将每个请求都称为它。您需要返回相同的内容。

标签: node.js session express


【解决方案1】:

app.use 接受带有签名(err, )req, res(, next) 的函数(或函数数组)

express.session() 像任何其他中间件一样返回一个函数。你永远不会调用函数。

var express = require('express');
function setSession(req, res, next){
  express.session({
    cookie:{ domain:"."+_settings.c.SITE_DOMAIN, maxAge:1440009999},
    secret:'password',
    store: r_store,
  })(req, res, next);
};  
exports.setSession = setSession;

【讨论】:

    猜你喜欢
    • 2022-07-29
    • 2020-02-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 2016-12-21
    • 2015-10-22
    相关资源
    最近更新 更多