一, 后台路由文件  /router/admin.js 

var express = require('express')
var router = express.Router()
/**
* 验证用户是否为管理员 ,防止其他用户通过 /admin 路径访问
*/
router.use((req,res,next)=>{
  console.log( req.userInfo.isAdmin)
  if(!req.userInfo.isAdmin){
    res.send('对不起,你不是管理员,不能进入')
    return
  }
  next()
})
router.get('/',(req,res,next)=>{
  console.log(('admin ---- req.userInfo 数据 :'+JSON.stringify(req.userInfo)).yellow)
  res.render('admin/index',{
  userInfo:req.userInfo
})
})
module.exports = router
 
二,后台视图文件 /views/admin/index.html  ,
  
  运用了模块的 调用 ,嵌套,继承重写 等语法

1,前台页面对其他页面的调用 :      {% extends 'layout.html' %}    // 调用当前目录下的 layout.html 页面 ,实现对模板的继承

2,调用完其他页面,本页面将不能直接写代码。

3,要先 被调用的模板里 通过定义 block 区块 进行占位  。   // 例如,定义一个main的block区块: {% block main %} {%  endblock %}

4,在调用者的模板里 通过重新定义block区块的内容进行重写输出   (相当于面向对象中的继承和重写)

 
{% extends 'layout.html' %}
{% block main %}
  <div class="jumbotron">
    <h1>Hello, {{userInfo.username}}!</h1>
    <p>欢迎进入系统后台</p>
  </div>
{% endblock %}
 
三, 被视图主页文件  /views/admin/index.html  调用的视图文件 /views/admin/layout.html 
 
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>后台</title>
<link rel="stylesheet" href="/public/css/bootstrap.min.css">
<link rel="stylesheet" href="/public/css/bootstrap-theme.min.css">
<script src="/public/js/jquery.js"></script>
<script src="/public/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container-fluid">
<nav class="navbar navbar-default">
<div class="container-fluid">
 
 
<div class="navbar-header">  
  <a class="navbar-brand" href="/admin">后台管理</a>
  </div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
  <li><a href="#">用户管理</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
  {{userInfo.username}}
  <span class="caret"></span>
</a>
<ul class="dropdown-menu">
  <li><a href="#">退出</a></li>
</ul>
  </li>
</ul>
  </div><!-- /.container-fluid -->
</nav>
<div class="containner-fluid">
  {% block main %}123{% endblock %}
</div>
</div>
</body>
</html>

13 ~ express ~ 后台页面的搭建的更多相关文章

  1. 【SSH网上商城项目实战03】使用EasyUI搭建后台页面框架

    转自:https://blog.csdn.net/eson_15/article/details/51312490 前面两节,我们整合了SSH并且抽取了service和action部分的接口,可以说基 ...

  2. nodejs中间件拦截,express不登录无法进入后台页面

    22.设置拦截 只有登录才能进入到后台页面,不登录无法进入 如果登陆成功, 写入session, 参数 uid uid=123dsfjksldfjsl 检测登陆, 请求中 session 是否包含 u ...

  3. Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(三)--前后端环境配置

    前言 之前都是介绍一些基础知识,在这一节,我们就要开始实战coding了.正所谓磨刀不误砍柴工,准备工作显得尤为重要.很多demo只是追求效果的实现,并不注重整个demo的架构性.从我个人的角度看来, ...

  4. 在Linux系统中如何设置APACHE服务器里的后台页面只允许某个IP地址访问

    补充资料 本网络中使用LINUX服务器,web服务器是由APACHE搭建,IP地址为192.168.1.5,后台页面为/admin/login.jsp . 如何设置后台页面LOGIN.JSP只允许19 ...

  5. [转]后台页面访问权限:页面基类&内置票据认证 使用方法

    本文转自:http://www.cnblogs.com/fishtreeyu/archive/2011/01/29/1947421.html 一般网站后台页面除了登录页面login.aspx未登录用户 ...

  6. Node+Express+MongoDB + Socket.io搭建实时聊天应用

    Node+Express+MongoDB + Socket.io搭建实时聊天应用 前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战 ...

  7. Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(二)--node解析与环境搭建

    前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战.写教程一方面在自己写的过程中需要考虑更多的东西,另一方面希望能对node入门者有 ...

  8. C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求

    C# 动态创建SQL数据库(二) 使用Entity Framework  创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...

  9. abtest-system后台系统设计与搭建

    本文来自网易云社区 作者:刘颂 1 项目背景: 2017年5月:客户端提出增加https&dns以及双cdn业务功能 后台配合实现使用disconf配置 针对不同的域名或者请求配置不同的htt ...

随机推荐

  1. 5.4 Linux 安装2个tomcat

    Linux系统下怎样配置多个Tomcat同时运行呢,首先第一个tomcat配置不变,然后修改第二个tomcat启动的脚本 拷贝第一个tomcat的目录到第二个tomcat目录 [root@eshop- ...

  2. 安装oracle客户端后,怎样设置电脑的环境变量?

    安装配置参考: http://www.haodaima.net/art/2854001 设置环境变量(修改PATH和TNS_ADMIN环境变量): 对于NLS_LANG环境变量, 最好设置成和数据库端 ...

  3. spring事务传播属性和隔离级别

    猫咪咪的Java世界 spring事务传播属性和隔离级别 博客分类: Spring java编程   1 事务的传播属性(Propagation) 1) REQUIRED ,这个是默认的属性 Supp ...

  4. Git如何修改一个过去的Commit

    假设我的git log 如下: commit 5511533dda6fee6982175fafca1f4bd5692e3d9c (HEAD -> trans, origin/trans) Aut ...

  5. leetcode713 Subarray Product Less Than K

    """ Your are given an array of positive integers nums. Count and print the number of ...

  6. POJ 1027:The Same Game 较(chao)为(ji)复(ma)杂(fan)的模拟

    The Same Game Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5168   Accepted: 1944 Des ...

  7. 【Winform】ProgressBar

    var progressBar1 = new System.Windows.Forms.ProgressBar(); ; progressBar1.Maximum = ; progressBar1.V ...

  8. 变相降价的iPhone,能挽救苹果在中国的命运吗?

    人无千日好,花无百样红.当年iPhone的横空出世不仅开辟了智能手机时代,还间接导致了诺基亚.黑莓等手机品牌的没落.十余年来,苹果凭借iPhone活得风光无限,并成为全球首个市值超万亿美元的公司.但进 ...

  9. '/'和‘/*’差异造成的No mapping found for HTTP request with URI [/springMVC/welcome.jsp] in DispatcherServlet with name 'springmvc'

    在采用springMVC框架的时候所遇到的一个小问题,其中web.xml中关于servlet的配置如下: <servlet> <servlet-name>springmvc&l ...

  10. 《高性能MySQL》之EXPLAIN

    使用explain关键字获取sql执行性能 语法如下: explain select * from table explain 中的列expain出来的信息有10列,分别是id,select_type ...