(黑马程序员)MongoDB + Express + art-template 项目实例-博客管理系统 第二页

本文主要是介绍(黑马程序员)MongoDB + Express + art-template 项目实例-博客管理系统 第二页,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

6、构建博客管理页面模板

 

1)先把静态资源复制粘贴到 public 目录下:

2)开放静态资源文件

打开 app.js 文件:

// 引入 express 框架
const express = require('express');
// 处理路径的模块
const path = require('path');
// 创建网站服务器
const app = express();// 开放静态资源文件
app.use(express.static(path.join(__dirname, 'public')));// 引入路由模块
const home = require('./route/home');
const admin = require('./route/admin');
// 将路由和请求路径进行匹配
app.use('/home', home);
app.use('/admin', admin);// 监听端口
app.listen(80);
console.log('网站服务器启动成功,请访问localhost');

在浏览器中输入:http://localhost/home/default.html ,可以访问到静态页面了。

因为在 html 文件中要拼接后台的数据,所以要把所有的 html 文件剪切到 views 目录下对应的文件夹中,也可以都改为 .art 文件。(如果改为 .art 文件,那么下面的模板配置要写为 art)

1.3、渲染模板

当客户端访问的是 / 或 /login 的时候渲染登录页面

先进行模板配置,打开 app.js文件:

// 告诉 express 框架模板所在的位置
app.set('views', path.join(__dirname, 'views'));
// 告诉 express 框架模板的默认后缀是什么
app.set('view engine', 'html');
// 渲染后缀为 html 的模板时,所使用的模板引擎是什么
app.engine('html', require('express-art-template'));

 注意:如果上面 .html 文件都改为了 .art 文件,那么这里要写为:

// 告诉 express 框架模板所在的位置
app.set('views', path.join(__dirname, 'views'));
// 告诉 express 框架模板的默认后缀是什么
app.set('view engine', 'art');
// 渲染后缀为 art 的模板时,所使用的模板引擎是什么
app.engine('art', require('express-art-template'));

// 引入 express 框架
const express = require('express');
// 处理路径的模块
const path = require('path');
// 创建网站服务器
const app = express();
// 告诉 express 框架模板所在的位置
app.set('views', path.join(__dirname, 'views'));
// 告诉 express 框架模板的默认后缀是什么
app.set('view engine', 'art');
// 渲染后缀为 art 的模板时,所使用的模板引擎是什么
app.engine('art', require('express-art-template'));// 开放静态资源文件
app.use(express.static(path.join(__dirname, 'public')));
// 引入路由模块
const home = require('./route/home');
const admin = require('./route/admin');
// 将路由和请求路径进行匹配
app.use('/home', home);
app.use('/admin', admin);// 监听端口
app.listen(80);
console.log('网站服务器启动成功,请访问localhost');

在浏览器中输入:http://localhost/admin/login ,可以看到:登录页就被渲染出来了

1.4、模板内部外链资源的路径问题

查看页面的源代码,可以看到头部样式文件的路径是相对路径,而且这个相对路径是相对浏览器地址中的请求路径。view-source:http://localhost/admin/login

点击 base.css 可以看到:地址上多了一个 /admin 目录

view-source:http://localhost/admin/css/base.css

但是这时候 css 文件可以正常显示,这是因为客户端的请求路径 /admin 和服务器端存储 css 文件的路径目录,正好是相同的;一旦不相同就会出现问题。我们可以测试下,打开 app.js 文件,把 admin 的请求路径改为 abc:然后在浏览器中也输入 :http://localhost/abc/login ,这是可以看到没有样式了: 

app.use('/abc', admin);

 现在可以把 abc 改回 admin 了,顺便把其他的模板文件都修改下。

1.5、优化模板 

将模板中的公共部分,抽离到单独的文件中。

通过观察 admin 目录下的各个 .art 文件,可以把头部和侧边栏都抽离出来。

在 views - admin 目录下,新建 common 文件夹,存放公共部分文件。 

新建 header.art 存放头部代码,新建 aside.art 存放侧边栏部分代码。

然后在各主文件中引用 header.art 和 aside.art 文件。

<body><!-- 子模板的相对路径,相对的是当前文件,因为它是有模板引擎解析的,而不是浏览器 -->{{ include './common/header.art' }}<!-- 主体内容 --><div class="content">{{ include './common/aside.art' }}<div class="main">

打开 admin.js 文件,创建 user 路由:

// 创建用户列表路由
admin.get('/user', (req, res) => {res.render('admin/user.art', {})
});

在浏览器中打开:http://localhost/admin/user ,可以看到:

1.6、模板 html 的骨架抽离

在 common 目录下,新建 layout.art 文件:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title></title><link rel="stylesheet" href="/admin/lib/bootstrap/css/bootstrap.min.css"><link rel="stylesheet" href="/admin/css/base.css">{{block 'link'}} {{/block}}
</head><body>{{block 'main'}} {{/block}}<script src="/admin/lib/jquery/dist/jquery.min.js"></script><script src="/admin/lib/bootstrap/js/bootstrap.min.js"></script>{{block 'script'}} {{/block}}
</body></html>

打开 user.art 文件,引用骨架 layout:

{{extend './common/layout.art'}}{{block 'main'}}<!-- 子模板的相对路径,相对的是当前文件,因为它是有模板引擎解析的,而不是浏览器 -->{{ include './common/header.art' }}<!-- 主体内容 --><div class="content">{{ include './common/aside.art' }}<div class="main"><!-- 分类标题 --><div class="title"><h4>用户</h4><span>找到1个用户</span><a href="user-edit.html" class="btn btn-primary new">新增用户</a></div><!-- /分类标题 --><!-- 内容列表 --><table class="table table-striped table-bordered table-hover custom-table"><thead><tr><th>ID</th><th>用户名</th><th>邮箱</th><th>角色</th><th>状态</th><th>操作</th></tr></thead><tbody><tr><td>5b9a716cb2d2bf17706bcc0a</td><td>wangjian</td><td>wjb19891223@163.com</td><td>超级管理员</td><td>正常</td><td><a href="user-edit.html" class="glyphicon glyphicon-edit"></a><i class="glyphicon glyphicon-remove" data-toggle="modal" data-target=".confirm-modal"></i></td></tr><tr><td>5b9a716cb2d2bf17706bcc0a</td><td>wangjian</td><td>wjb19891223@163.com</td><td>普通用户</td><td>禁用</td><td><a href="user-edit.html" class="glyphicon glyphicon-edit"></a><i class="glyphicon glyphicon-remove" data-toggle="modal" data-target=".confirm-modal"></i></td></tr><tr><td>5b9a716cb2d2bf17706bcc0a</td><td>wangjian</td><td>wjb19891223@163.com</td><td>普通用户</td><td>启用</td><td><a href="user-edit.html" class="glyphicon glyphicon-edit"></a><i class="glyphicon glyphicon-remove" data-toggle="modal" data-target=".confirm-modal"></i></td></tr></tbody></table><!-- /内容列表 --><!-- 分页 --><ul class="pagination"><li><a href="#"><span>«</span></a></li><li><a href="#">1</a></li><li><a href="#">2</a></li><li><a href="#">3</a></li><li><a href="#">4</a></li><li><a href="#">5</a></li><li><a href="#"><span>»</span></a></li></ul><!-- /分页 --></div></div><!-- /主体内容 --><!-- 删除确认弹出框 --><div class="modal fade confirm-modal"><div class="modal-dialog modal-lg"><form class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal"><span>×</span></button><h4 class="modal-title">请确认</h4></div><div class="modal-body"><p>您确定要删除这个用户吗?</p></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">取消</button><input type="submit" class="btn btn-primary"></div></form></div></div><!-- /删除确认弹出框 -->
{{/block}}

在浏览器中刷新页面,发现没有问题。把其他几个模板文件也都修改下。

这篇关于(黑马程序员)MongoDB + Express + art-template 项目实例-博客管理系统 第二页的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/159472

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

SpringBoot项目是如何启动

启动步骤 概念 运行main方法,初始化SpringApplication 从spring.factories读取listener ApplicationContentInitializer运行run方法读取环境变量,配置信息创建SpringApplication上下文预初始化上下文,将启动类作为配置类进行读取调用 refresh 加载 IOC容器,加载所有的自动配置类,创建容器在这个过程

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免