node.js - 如何在ejs View 中传递flash消息

标签 node.js ejs

index.js

/**
 * Created by sysadmin on 1/25/2017.
 */

var express = require('express');
var router = express.Router();
var request = require('request');
var session = require('express-session');

var User=require('../models/user');

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var sess;

// get register
router.get('/register', ensureAuthenticated,function(req, res){
    res.render('register');
});

function ensureAuthenticated(req, res, next){
    if(req.isAuthenticated()){
        return next();
    } else {
        //req.flash('error_msg', 'You are not logged in');
        res.redirect('/users/login');
    }
}

// Login
router.get('/login', function(req, res){
    res.render('login');
});

router.get('/admin', function(req, res){
    res.render('admin');
});




router.post('/register', function(req, res){
    var username=req.body.username;
    var password=req.body.password;
    var email=req.body.email;
    var role=req.body.role;

    req.checkBody('username','Name is required').notEmpty();
    req.checkBody('password','Password is required').notEmpty();
    req.checkBody('email','Email is required').notEmpty();
    req.checkBody('role','role is required').notEmpty();
    var errors=req.validationErrors();

    if(errors){

        res.render('register',{errors:errors})
    }
        else{
            var newUser = new User({
                username:username,
                email:email,
                password:password,
                role:role
            });

            User.createUser(newUser,function(err,user){
                if(err) throw err;
                console.log(user);
            });
            req.flash('success_msg', 'you are registered');

            res.redirect('/users/login');
        }

});

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.getUserbyUsername(username, function(err, user){
        if(err) throw err;
        if(!user){
            return done(null, false, {message: 'unknown user'});
        }
        User.comparePassword(password, user.password, function(err, isMatch){
            if(err) throw err;
            if(isMatch){
                return done(null, user);
            } else {
                return done(null, false, {message: 'Invalid password'});
            }
        });
    });

  }));

passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  User.getUserbyId(id, function(err, user) {
    done(err, user);
  });
});

 router.post('/login',
  passport.authenticate('local', {failureRedirect:'/users/login', failureFlash: true}),
  function(req, res) {

      sess = req.session;
//In this we are assigning email to sess.email variable.
//email comes from HTML page.
  sess.email=req.user.role;

    // If this function gets called, authentication was successful.
    // `req.user` contains the authenticated user.
    console.log(req.user.role);
    if(req.user.role == "admin"){
      req.flash('isAdmin','admin');
//      req.session.role = 'admin';
        res.redirect('/');
    }
    else{
      req.flash('otherusers', 'otherusers'); 
      res.redirect('/');

    }
  });

 router.get('/logout', function(req, res){

    req.logout();
    req.flash('success_msg', 'You are logged out');
    res.redirect('/users/login');
 });


 router.get('/restful', function(req, res){
  sess = req.session;
  console.log(sess.email);

    res.render('restful');
 });

 router.post('/restful', function(req, res){
    var options = {
        uri : 'http://192.168.1.6:8080/RestTGRP/TGRP/checkAPI',
        method : 'post'
    }; 
    var responseFromClient = '';
    request(options, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            responseFromClient = body;
        }
        else {
            responseFromClient = 'Not Found';
        }
        console.log(responseFromClient);
        //res.json(resss);
        req.flash('response_msg', responseFromClient);

        if(responseFromClient !='Not Found'){
          res.redirect('/users/restful');
        }
        else{
          res.redirect('/users/restful');
        }
    });
 });

module.exports = router;

这是我的 user.js,我在这里使用了 Flash 消息。现在我希望这些消息显示在我的 View 中。我使用 ejs 作为 View 模板。我如何在我的 View 中传递这个值?如何在 View 中传递这个值?我有单独的注册、登录 View 。我是否需要在每个 ejs 中声明,或者我们可以在一个特定的 ejs 文件中声明并包含在其他 ejs 页面中吗?

最佳答案

该 Node 模块使 Flash 消息易于集成、小巧且易于使用:

https://www.npmjs.com/package/express-flash

用法:(服务器)

app.get('/logout', function (req, res) {
    req.flash('logged', null);
    res.render('logout')
  });
  app.post('/logout', function (req, res) {
    req.flash('logged', 'You are logged out');
    res.redirect('/logout');
  });

用法:(ejs View )

<% if(messages.logged) { %>
  <%= messages.logged %>
<% } %>

关于node.js - 如何在ejs View 中传递flash消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42340874/

相关文章:

Node.js 并发 https.requests ECONNREFUSED

javascript - JS - 如何正确使用setTimeout()

javascript - 如何在函数调用 javascript 中使用 var ejs

javascript - 如何使用 Node.js、EJS 模板和动态文件名进行多重渲染

javascript - 如何在 EJS 中检索对象内部的对象

node.js - Nodejs 和 pdfKit 和 qr-image

Nodejs 上的 Javascript ES6 : TypeError: object is not a constructor

performance - Node.js 比 Apache 慢

node.js - TypeError : Cannot read property 'userAgent' of undefined error on node. js应用程序运行

node.js - heroku config vars 可以是 bool 值并且 ejs 可以访问它吗?