思维导图 :

12 ~ 普通用户和管理员功能的实现_数据库


一,/schemas/users.js   在数据库中新增 是否是管理员字段 

var mongoose = require('mongoose')

// 创建表结构

module.exports =new mongoose.Schema({

  username:String,

  password:String,


  /**

  *  拓展 : 定义数据类型和默认值

  */

  isAdmin:{

    type:Boolean,

    default:false

  }

})


二,在数据库中手动添加一个超级管理员:

12 ~ 普通用户和管理员功能的实现_html_02



三,在入口文件 app.js  中引入 User 模型 进行管理员验证

app.use((req, res, next) => {


  //调用 cookies 的方法把 cookie 加载到 【 req 】 这个对象里面

  req.cookies = new Cookies(req, res)


  //创建一个全局变量,给所有路由访问。 把数据保存到 req 对象中

  req.userInfo = {}


  if (req.cookies.get("userInfo")) {

    try {


      // 解析登陆用户的 cookie 信息

      var userInfo = req.cookies.get("userInfo")

      req.userInfo = JSON.parse(decodeURI(userInfo))

      console.log('app.js, 解析userinfo-成功')

      console.log(req.userInfo)


      // 获取当前用户的类型,是否时管理员

      User.findById(req.userInfo._id).then((userInfo)=>{

        if(userInfo.isAdmin == true){

          req.userInfo.isAdmin = true

        }

        next() // ----- 注意 ----【 添加完数据必须在此处 next() , 在作用域外将没有数据】

       })


    } catch (e) {

      console.log("app.js, 解析cookie信息失败")

      next()

    }


  }else{

    next()

  }

})

四,前台路由文件(也称前台模板)  /router/main.js    , 获取数据 

  var express = require('express')

  var router = express.Router()


  router.get('/',(req,res,next)=>{

    // res.render('main/index') //index.html 的 .html后缀 可以省略 . 【注意: main/index :表示main文件夹下的index.html 】


    /**

    *  将用户信息分配给模板 => 通过 res.render方法的第二个参数进行传入

    *

    *  传入的对象就是 分配给模板 去使用的数据

    */


    console.log(('req.userInfo 数据 :'+JSON.stringify(req.userInfo)).yellow)

    res.render('login',{

      userInfo:req.userInfo

    })

})


module.exports = router


五,前台文件  /views/login.html  , 通过模板数据来进行判断

{% if userInfo._id %}


  {% if userInfo.isAdmin %}

    <div id="admin">

      <h5>你好 <span id="user">{{userInfo.username}}</span></h5>

      <a href="/admin">你可以点击这里进入应用后台管理中心</a><br>

      <a href="/logout" id="logout">退出登陆</a>

    </div>

  {% else %}


  <div class="userinfo">

  <h2>你好 <span id="user">{{userInfo.username}}</span></h2>

  <a href="/logout" id="logout">退出登陆</a>

  </div>

  {% endif %}





  {% else %}

    <div class="form" id="register">

      <div class="form-group">

        <label for="username">用户名</label>

        <input type="text" class="form-control" id="username" name="username" placeholder="User">

      </div>

      <div class="form-group">

        <label for="password">密码</label>

        <input type="password" class="form-control" id="password" name="password" placeholder="Password">

      </div>

      <div class="form-group">

        <label for="repassword">密码</label>

        <input type="password" class="form-control" id="repassword" name="repassword" placeholder="Password">

      </div>

      <div class="form-group">

        <button type="submit" class="btn btn-primary">注册</button>

        <div class="info"></div>

      </div>

      已有账号?马上<a class="change" href="javacript:void(0);">登陆</a>

  </div>


  <div class="form" id="login">

    <div class="form-group">

      <label for="username">用户名</label>

      <input type="text" class="form-control" id="username" name="username" placeholder="User">

    </div>

    <div class="form-group">

      <label for="password">密码</label>

      <input type="password" class="form-control" id="password" name="password" placeholder="Password">

    </div>

    <div class="form-group">

      <button type="submit" class="btn btn-primary">登 陆</button>

    </div>

    还没注册?马上<a class="change" href="javacript:void(0);">注册</a>

  </div>

{% endif %}


——————————————————————

注意:

管理员最好不要存放在 cookie 中。