NodeJS:Express 3.0 with connect-flash(按照护照本地策略中的建议),仍然发现 req.flash 异常

Posted

技术标签:

【中文标题】NodeJS:Express 3.0 with connect-flash(按照护照本地策略中的建议),仍然发现 req.flash 异常【英文标题】:NodeJS: Express 3.0 with connect-flash( as advised in the passport local strategy), still finding exception for req.flash 【发布时间】:2012-10-19 14:14:09 【问题描述】:

我是 NodeJS 的新手,并试图在 Express3.0 上构建一个应用程序,包括用于身份验证的护照本地策略。但是以下异常(关于 req.flash)阻碍了我的进步。

异常发生在以下行。 res.render('login', user: req.user, message: req.flash('error') ); 表示 500 TypeError: Object # has no method 'flash' 在 /Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/app.js:115:54 在回调(/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/lib/router/index.js:162:37) 在参数(/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/lib/router/index.js:136:11) 通过(/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/lib/router/index.js:143:5) 在 Router._dispatch (/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/lib/router/index.js:171:5) 在 Object.router (/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/lib/router/index.js:33:10) 在下一个(/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/node_modules/connect/lib/proto.js:190:15) 在 store.get.next (/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/node_modules/connect/lib/middleware/session.js:310:9) 在 /Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/node_modules/connect/lib/middleware/session.js:333:9 在 /Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/node_modules/connect/lib/middleware/session/memory.js:52:9

按照作者的建议,我已经安装了 connect-flash 来恢复已弃用的 req.flash 方法(passport-local-strategy)。请找到应用中安装的 npm 包。

├── connect-flash@0.1.0 ├── ejs@0.8.3 ├── ejs-locals@0.2.5 ├─┬ express@3.0.0 │ ├── 指挥官@0.6.1 │ ├─┬ connect@2.6.0 │ │ ├── bytes@0.1.0 │ │ ├── formidable@1.0.11 │ │ ├── pause@0.0.1 │ │ ├── qs@0.5.1 │ │ └─┬ send@0.0.4 │ │ └── mime@1.2.6 │ ├── cookie@0.0.4 │ ├── crc@0.2.0 │ ├── debug@0.7.0 │ ├── 新鲜@0.1.0 │ ├── methods@0.0.1 │ ├── mkdirp@0.3.3 │ ├── range-parser@0.0.4 │ └─┬ 发送@0.1.0 │ └── mime@1.2.6 ├─┬ 护照@0.1.12 │ └── pkginfo@0.2.3 ├─┬ passport-local@0.1.6 │ ├── 护照@0.1.12 │ └── pkginfo@0.2.3 ├─┬ socket.io@0.9.10 │ ├── policyfile@0.0.4 │ ├── redis@0.7.2 │ └─┬ socket.io-client@0.9.10 │ ├─┬ active-x-obfuscator@0.0.1 │ │ └── zeparser@0.0.5 │ ├── uglify-js@1.2.5 │ ├─┬ ws@0.4.22 │ │ ├── 指挥官@0.6.1 │ │ ├── options@0.0.3 │ │ └── tinycolor@0.0.1 │ └── xmlhttprequest@1.4.2 └─┬ stylus@0.30.1 ├── cssom@0.2.5 ├── 调试@0.7.0 └── mkdirp@0.3.4

【问题讨论】:

【参考方案1】:

尝试将此添加到您的主 app.configure 方法中

app.use(flash());

【讨论】:

是的,我将此添加到我的配置中。它仍然会发生。【参考方案2】:
npm install connect-flash --save

var flash = require('connect-flash')
app.use(flash());

我认为你用错了。您只需要在 res.redirect 之前使用类型和消息调用 req.flash()

   req.flash('info', 'Welcome to the site, a welcome email has been sent to you.');
   res.redirect('/');

【讨论】:

谢谢,但它没有用,我也没有尝试任何新的东西,我只是按照author jared-hanson 提供的示例进行操作。更多详情请查看code snippet中的第106行。 你添加了 app.use(flash());在 app.js 中的路线上方? 我已经添加了 app.use(flash());仍然不知道出了什么问题,但是在剥离了几个包和 npm install 后它就可以工作了。 这个问题已经发生在我身上了:我认为这个模块“不稳定”或不成熟,因为它不能按预期工作以及它在官方 wiki 中是如何指出的。

以上是关于NodeJS:Express 3.0 with connect-flash(按照护照本地策略中的建议),仍然发现 req.flash 异常的主要内容,如果未能解决你的问题,请参考以下文章

Node.js / Express with vhost 与 Sails.js 框架应用程序冲突

Keycloak-connect with express,有没有简单的Keycloak登录方法

nodejs+express+jade配置

NodeJs安装express

C++ Detours 3.0 express on MVS 2012 错误“找不到标识符”

nodejs express restful api插件restframework-express使用