Javascript 在nodejs中向模式发送数据而不重定向
我正在使用管理身份验证。我想根据文档将flash消息发送回UI。在我的UI场景中,我使用了一个模式,这样做Javascript 在nodejs中向模式发送数据而不重定向,javascript,jquery,ajax,node.js,flash-message,Javascript,Jquery,Ajax,Node.js,Flash Message,我正在使用管理身份验证。我想根据文档将flash消息发送回UI。在我的UI场景中,我使用了一个模式,这样做 res.render('login.ejs', { message: req.flash('loginMessage') }); 无法工作,因为您只能在页面刷新时进行渲染。因此,当由于某种原因无法登录时,我如何向我的页面发送闪存数据或任何其他类型的数据。特别是不管flash数据如何,我都不知道如何使用express将数据渲染到模式 routes.js 在res.render下,身份验证失
res.render('login.ejs', { message: req.flash('loginMessage') });
无法工作,因为您只能在页面刷新时进行渲染。因此,当由于某种原因无法登录时,我如何向我的页面发送闪存数据或任何其他类型的数据。特别是不管flash数据如何,我都不知道如何使用express将数据渲染到模式
routes.js
在res.render下,身份验证失败时不会发生
//Home Page ===================================
app.get('/', function(req, res) {
res.render('login.ejs', { message: req.flash('loginMessage') });
});
//Login Modal =================================
app.post('/login', passport.authenticate('local-login', {
successRedirect : '/profile',
failureFlash : true
}));
index.ejs(我的模态所在)
登录
0) { %>
电子邮件
密码
登录
登录
因此,经过一番挖掘,我找到了解决方案。关键在于识别jquery not express是答案,让客户端处理重定向和POST/GET。我只包括本地登录策略的更新,但它们也会应用于您的注册/社交其他社交配置文件
对passport.js的更改(次要)
改变我的路线(我挣扎的部分)
这里需要注意的关键是,我正在决定通过res.send发送什么数据。我可以发送任何东西,在这种情况下,信息是来自passport.js(“坏密码”)的。如果我很高兴并且能够登录,我会发送一个简单有效的消息:true json
//Login Modal =================================
app.get('/localLogin', function(req, res, next) {
passport.authenticate('local-login', function(err, user, info) {
if (err) { return next(err); }
//if there is no user in the response send the info back to modal
if (!user) {
return res.send(info);
}
//user was able to login, send true and redirect
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.send({ valid: true });
});
})(req, res, next);
});
对my index.js的更改
在my modal的顶部添加了一个div来显示消息,删除旧的部分,并从表单中删除动作和方法,jQuery将为我们做到这一点。(包含完整的模式代码以使其透明)
登录
电子邮件
密码
登录
登录
我真的需要这个!我一直在跟踪你的答案直到每一个代码,但在这一部分:$.get('/login',data,function(result){
,当我尝试登录时,我得到了“uncaughttypeerror:$.get不是一个函数”。javascript中一定有什么我做错了,但我不知道。你知道我遗漏了什么吗?
//Login Modal =================================
app.get('/localLogin', function(req, res, next) {
passport.authenticate('local-login', function(err, user, info) {
if (err) { return next(err); }
//if there is no user in the response send the info back to modal
if (!user) {
return res.send(info);
}
//user was able to login, send true and redirect
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.send({ valid: true });
});
})(req, res, next);
});