Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在nodejs中向模式发送数据而不重定向_Javascript_Jquery_Ajax_Node.js_Flash Message - Fatal编程技术网

Javascript 在nodejs中向模式发送数据而不重定向

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下,身份验证失

我正在使用管理身份验证。我想根据文档将flash消息发送回UI。在我的UI场景中,我使用了一个模式,这样做

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