快速连接闪存仅在刷新后显示. 代码被剥离以便于阅读.
"express": "~4.2.0",
"connect-flash": "~0.1.1",
Run Code Online (Sandbox Code Playgroud)
这是我的 app.js
var express = require('express'),
favicon = require('serve-favicon'),
flash = require('connect-flash');
var app = express();
app.use(cookieParser('---'));
app.use(session({
secret: '---',
saveUninitialized: true,
resave: true}));
app.use(flash());
app.use(function(req, res, next) {
res.locals.messages = req.flash();
next();
});
Run Code Online (Sandbox Code Playgroud)
在我的路线我试过像
req.flash('success', {msg: 'Sign Up Success'});
res.redirect('/me/dashboard');
Run Code Online (Sandbox Code Playgroud)
我的错误显示msg.jade
模板是
for msg in messages
div #{msg.msg}
Run Code Online (Sandbox Code Playgroud)
我只是在刷新/ redirtect之后收到消息.请让我知道我做错了什么.
我也看到了这一点,但我觉得它过时了
我在使用connect-flash工作时遇到了一些问题,我得到的错误信息是:
'错误:req.flash()需要会话'
我已经看到这可能是因为应用程序的排序,但我不确定这是否是这种情况.
App.js:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var flash = require('connect-flash');
var passport = require('passport');
var app = express();
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({secret: '{secret}', name: 'session_id', saveUninitialized: true, resave: true}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
Run Code Online (Sandbox Code Playgroud)
路线等如下
闪存生成代码:
passport.authenticate('local', { failureRedirect: '/login', successRedirect: '/', failureFlash: true})
Run Code Online (Sandbox Code Playgroud) 当我尝试从页面登录时,我收到了错误return done(null, false, req.flash('loginMessage', 'User does not exist'));
TypeError: req.flash is not a function
.
以下是我的server.js和passport.js配置:
server.js:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var methodOverride = require('method-override');
var session = require('express-session');
var ejs = require('ejs');
var mongoose = require('mongoose');
var passport = require('passport');
var flash = require('connect-flash');
mongoose.connect('mongodb://localhost:mydb');
require('./config/passport')(passport);
app.use(express.static('public'));
app.set('view engine', 'ejs');
app.set('views', __dirname+'/public/views');
app.use(bodyParser.urlencoded({'extended':'true'}));
app.use(bodyParser.json());
app.use(methodOverride());
app.use(session({secret:'learningpassport',
resave: true,
saveUnitialized: true}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
require('./app/routes')(app,passport);
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
配置/ passport.js:
var LocalStrategy = …
Run Code Online (Sandbox Code Playgroud) 关于flash,connect-flash和express-flash之间究竟有什么区别我还是有点困惑.
安装:
闪npm install flash
快递:npm install express-flash
连接闪存:npm install connect-flash
用法:
闪光:
app.use(session()); // session middleware
app.use(require('flash')());
app.use(function (req, res) {
// flash a message
req.flash('info', 'hello!');
next();
})
Run Code Online (Sandbox Code Playgroud)
连接闪存
var flash = require('connect-flash');
var app = express();
app.configure(function() {
app.use(express.cookieParser('keyboard cat'));
app.use(express.session({ cookie: { maxAge: 60000 }}));
app.use(flash());
});
Run Code Online (Sandbox Code Playgroud)
express-flash它甚至要求使用的设置方式与connect-flash相同:
var flash = require('express-flash'),
express = require('express'),
app = express();
app.use(express.cookieParser('keyboard cat'));
app.use(express.session({ cookie: { maxAge: 60000 }}));
app.use(flash()); …
Run Code Online (Sandbox Code Playgroud) 我正在学习如何使用nodejs和passport设置身份验证的教程.(http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local)
本教程让我使用ejs渲染模板并传入flash数据.
而不是这个,我想使用angularjs.我遇到问题的部分是获取闪存数据.我知道如何使用模板和发送变量,但角度中的内容取代了下面代码中的"req.flash('signupMessage')"?
这是教程显示的代码:
app.get('/signup', function(req, res) {
// render the page and pass in any flash data if it exists
res.render('signup.ejs', { message: req.flash('signupMessage') });
});
Run Code Online (Sandbox Code Playgroud)
这是我设置路线的代码
// public/js/appRoutes.js
angular.module('appRoutes', []).config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
$routeProvider
// show signup form
.when('/signup', {
templateUrl: 'views/signup.html',
controller: 'SignupController'
});
$locationProvider.html5Mode(true);
}]);
Run Code Online (Sandbox Code Playgroud)
这是控制器:
// public/js/controllers/SetupCtrl.js
angular.module('SignupCtrl', []).controller('SignupController', function($scope) {
$scope.tagline = 'TEST';
});
Run Code Online (Sandbox Code Playgroud) 从本示例开始,我正在为节点应用程序进行用户注册,但是使用MySQL数据库而不是MongoDB。用户中的多列表具有唯一性约束。
这是创建表的SQL代码:
CREATE TABLE `' + dbconfig.database + '`.`' + dbconfig.users_table + '` ( \
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT, \
`username` VARCHAR(60) NULL, \
`password` CHAR(60) NULL, \
`facebook_id` VARCHAR(60) NULL, \
`facebook_token` CHAR(223) NULL, \
`facebook_name` VARCHAR(100) NULL, \
`facebook_email` VARCHAR(100) NULL, \
`google_id` VARCHAR(60) NULL, \
`google_token` CHAR(67) NULL, \
`google_name` VARCHAR(100) NULL, \
`google_email` VARCHAR(100) NULL, \
PRIMARY KEY (`id`), \
UNIQUE INDEX `id_UNIQUE` (`id` ASC), \
UNIQUE INDEX `username_UNIQUE` …
Run Code Online (Sandbox Code Playgroud) 我想在connect-flash消息的文本中包含一个链接:
JS
req.flash("registerMessage", "Sorry, the User ID you chose is already in use. Please choose another. If you have already registered and need assistance logging in, <a href=\"http://www.example.com/support/\">contact support</a>");
Run Code Online (Sandbox Code Playgroud)
EJS
<% if (message.length > 0) { %>
<div class="alert alert-danger"><%= message %></div>
<% } %>
Run Code Online (Sandbox Code Playgroud)
结果
<div class="alert alert-danger">Sorry, the User ID you chose is already in use. Please choose another. If you have already registered and need assistance logging in, <a href="http://www.example.com/support/">contact support</a>.</div>
Run Code Online (Sandbox Code Playgroud)
有没有办法阻止Flash转义HTML字符,以便我可以在我的消息中显示链接?
我有Flash消息问题。我的页面上没有错误消息。请告诉我错误在哪里。
PS。对不起,我的英语; D
app.js
要求:快递,护照,哈巴狗,快递会话,cookie解析器,connect-flash,身体解析器...
var router = require('./router.js')(passport);
var initPassport = require('./passport-init.js');
var app = express();
app.set('views', __dirname + '/views');
app.set('view engine', 'pug');
app.use(cookieParser('secret'));
app.use(session({ cookie: { maxAge: 60000 }, secret: 'secret' }));
app.use(flash());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(passport.initialize());
app.use('/', router);
initPassport(passport);
Run Code Online (Sandbox Code Playgroud)
router.js
var express = require('express');
var router = express.Router();
module.exports = function(passport) {
router.get('/', function(req, res) {
res.render('index', {
title: 'index page'
});
});
router.post('/auth',
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/',
failureFlash: true
})
);
return (router); …
Run Code Online (Sandbox Code Playgroud) 我是 Node.js 的初学者,我非常喜欢它。我想知道如何才能以最好、最简单的方式处理 Flash 消息。
我在我的网站中使用了 connect-flash 包。它有更好的吗?
我总是将 Flash 消息放入渲染函数中,如下所示:
res.render('auth/login', {
title: 'Log in',
success: req.flash('success'),
error: req.flash('error')
});
Run Code Online (Sandbox Code Playgroud)
它有办法处理全球事务吗?就像在 res.locals.messages 变量或类似的东西中?
我使用 JADE html 模板,所以我像 #{success} 一样打印它们。我如何以这种方式访问全局变量来打印我的闪存消息?
非常感谢您的帮助和建议!
我遇到了一些关于连接闪存的奇怪问题,我在其他项目中以完全相同的方式使用它并且它工作正常,这就是我所拥有的:
一些路线
if (err) {
req.flash('message', [{
class: 'alert-danger',
message: 'TEST'
}]);
res.redirect('/error');
}
Run Code Online (Sandbox Code Playgroud)
错误路线
router.get('/error', function (req, res, next) {
console.log('---in error route')
console.log(req.flash('message'));
res.render('error', {
message: req.flash('message'),
layout: layout
});
})
Run Code Online (Sandbox Code Playgroud)
的console.log
---in error route
[ { class: 'alert-danger', message: 'TEST' } ]
Run Code Online (Sandbox Code Playgroud)
error.hbs
{{#if message}}
{{#each message}}
<div class="{{this.class}}">{{this.message}}</div>
{{/each}}
{{/if}}
Run Code Online (Sandbox Code Playgroud)
显然它在那里,但没有打印输出,如果我将第一条路线中的确切事物复制到错误,它会显示(这对我不起作用,但仅用于测试以确保hbs模板逻辑有效):
router.get('/error', function (req, res, next) {
req.flash('message', [{
class: 'alert-danger',
message: 'TEST'
}]);
res.render('error', {
message: req.flash('message'),
layout: layout
});
})
Run Code Online (Sandbox Code Playgroud)
它可能很简单,但我不知道它是什么.
connect-flash ×10
node.js ×9
express ×7
passport.js ×5
pug ×2
angularjs ×1
ejs ×1
heroku ×1
mysql ×1