一,router/admin.js

var express = require('express')
var router = express.Router()
var User = require('../models/User')
/** 验证用户是否为管理员 ,防止其他用户通过 /admin 路径访问 */
router.use((req, res, next) => {
if (!req.userInfo.isAdmin) {
res.send('对不起,你不是管理员,不能进入')
return
}
  next()
})
/** 首页 */
router.get('/', (req, res) => {
console.log(('admin ---- req.userInfo 数据 :' + JSON.stringify(req.userInfo)).yellow)
  res.render('admin/index', {
  userInfo: req.userInfo
})
})
/** 用户管理 */
router.get('/user', (req, res) => {
/**通过类或构造函数的方法读取 => 所有用户的信息 */
User.find().then((users) => {
  console.log((' 所有用户 : ' + users).red)
/**
*
* 【 重点 : 数据到模板的传输 】
*
* 不要删除 userInfo , 会影响到cookie .
*
* 在数据中添加 users 即可
*/
res.render('admin/user', {
  userInfo: req.userInfo,
  users:users
})
  })
// 错误的示例
// res.render('admin/user', {
//    users: req.userInfo
// })
})
module.exports = router
 
二, /views/admin/user.html
{% extends 'layout.html' %}
{% block main %}
<ol class="breadcrumb">
<li><a href="/admin">管理首页</a></li>
<li><span href="/user">用户列表</span></li>
</ol>
<h3>用户列表</h3>
<table class="table table-bordered">
<tr>
<th>用户名</th>
<th>id</th>
<th>密码</th>
<th>是否是管理员</th>
</tr>
<!-- 循环输出数组 . id是对象,需要转换成字符串 -->
 
{% for user in users %}
<tr>
<td> {{user.username}}</td>
<td> {{user._id.toString()}}</td>
<td> {{user.password}}</td>
{% if user.isAdmin %}
<td> 管理员 <td>
{% else %}
<td> 普通用户</td>
{% endif %}
</tr>
{% endfor %}
 
</table>
{% endblock %}

14 ~ express ~ 显示用户数据的更多相关文章

  1. Easyui Datagrid 如何实现后台交互显示用户数据列表

    转自:https://blog.csdn.net/Tomsheng321/article/details/50722571?utm_source=blogxgwz9 新手初学的时候可能有个疑问:如何在 ...

  2. wordpress教程之the_author_meta()显示用户的信息

    描述 模板标签函数the_author_meta可以显示用户数据.如果该函数在文章主循环(Loop)中,则不必指定作者的ID值,标签所显示的就是当前文章作者的内容.如果在主循环(Loop)外,则需要指 ...

  3. 15 ~ express ~ 用户数据分页原理和实现

    一,在后台路由 /router/admin.js 中 1,限制获取的数据条数 : User.find().limit(Number) 2,忽略数据的前(Number)条数据 : skip(Number ...

  4. C#开发微信门户及应用(14)-在微信菜单中采用重定向获取用户数据

    我曾经在系列文章中的<C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍>中介绍了微信菜单里面的重定向操作,通过这个重定向操作,我们可以获取一个code值,然后获取用户的open ...

  5. [译] 使用Using Data Quality Services (DQS) 清理用户数据

    SQL Server 2012 Data Quality Services (DQS)  允许你使用自己的知识库来清洗数据. 在本文中我会展示一个简单示例. 使用DQS清理步骤如下: A. 建立DQS ...

  6. [ios3-地图] 如何在iOS地图上高效的显示大量数据 [转]

    [转至:http://blog.csdn.net/pjk1129/article/details/17358337] 原文:How To Efficiently Display Large Amoun ...

  7. 04: Form 验证用户数据 & 生成html

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

  8. Android用surface直接显示yuv数据(三)

    本文用Java创建UI并联合JNI层操作surface来直接显示yuv数据(yv12),开发环境为Android 4.4,全志A23平台. package com.example.myyuvviewe ...

  9. Qt 学习之路 2(14):对话框数据传递

    Home / Qt 学习之路 2 / Qt 学习之路 2(14):对话框数据传递 Qt 学习之路 2(14):对话框数据传递  豆子  2012年9月15日  Qt 学习之路 2  53条评论 对话框 ...

随机推荐

  1. Broadcast机制(二)

    内容提纲: 在本节课当中,我会继续为大家讲解Android的广播机制,重点内容有以下的两个方面: a)         在应用程序当中注册BroadcastReceiver的方法 b)         ...

  2. 使用 XMLBeans 进行编程

      深入考察 XMLBeans 的特性和功能.本文通过一个简单的例子介绍 XMLBeans 技术,然后一步一步地介绍编译和绑定的过程,讨论 XML 游标.标记和 XQuery 表达式等高级特性.本文还 ...

  3. L2-002. 链表去重(模拟)

    题意: 给定一个带整数键值的单链表L,本题要求你编写程序,删除那些键值的绝对值有重复的结点.即对任意键值K,只有键值或其绝对值等于K的第一个结点可以被保留.同时,所有被删除的结点必须被保存在另外一个链 ...

  4. PyCharm配置TensorFlow开发环境

    Anaconda自带的Jupyter Notebook很方便,但是执行速度较慢,缺少调试环境.PyCharm与Jupyter Notebook相比,执行速度更快,而且提供了类似Matlab的调试工具, ...

  5. vue :is 属性

    为什么使用 :is ?DOM模板解析说明: 当使用DOM作为模板时(例如,将el选项挂载到一个已知的元素上),你会受到HTML的一些限制,因为Vue只有在浏览器解析和标准化HTML后才能获取模板内容. ...

  6. Redis详解(四)——删除策略

    Redis详解(四)--删除策略 Redis中的数据特征 Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令来获取其状态,当 key 不存在时,返回 -2 . 当 k ...

  7. Combobox出现System.Data.DataRowView的原因

    这种情况多次遇到.有时候明明完全相同的代码,在不同的场景运行却是两种结果, 其中一种坏的结果就是 comboBox所有的项都显示为System.Data.DataRowView 今天仔研究了一下,应该 ...

  8. springboot创建bean

    springboot创建bean的方式有两种: 1.直接类上加注解@Component@Controller@Service ... 2.使用@Bean注解配合@Configuration注解 区别是 ...

  9. VS2012 ffmpeg 没有定义的lrint

    在common.h #ifndef AVUTIL_COMMON_H#define AVUTIL_COMMON_H下添加 #define lrint(f) (f>=0?(int32_t)(f+(d ...

  10. golang开启随机端口并获取端口

    listener, err := net.Listen("tcp", ":0") if err != nil { panic(err) } fmt.Printl ...