思维导图 :
一,/schemas/users.js 在数据库中新增 是否是管理员字段
var mongoose = require('mongoose')
// 创建表结构
module.exports =new mongoose.Schema({
username:String,
password:String,
/**
* 拓展 : 定义数据类型和默认值
*/
isAdmin:{
type:Boolean,
default:false
}
})
二,在数据库中手动添加一个超级管理员:
三,在入口文件 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 中。