博客管理与文章发布系统-第三方模块及其用法Part1
写个帖子记录一下自己写的第一个express完整项目。
所需第三方模块及其用法。
一.先把所需文件和准备工作写一下
写项目前的准备
1.创建所需文件夹 public 静态资源
model 数据库操作
route 路由
views 模板
2.初始化项目描述文件
npm init -y
3.下载第三方模块
npm install express mongoose express的数据库处理模块
art-template 模板模块
express-art-template. express的模板渲染模块
二.第三方模块
1.express创建服务器初始化
// 引用框架
const express = require('express');
express引擎下面有3个接收请求的方法:
1.app.get
app.get('/', (req, res) => {
// send()
// 1.send内部会检测响应内容的类型
// 2.会自动帮我们设置HTTP的状态码
// 3.自动设置响应内容的编码
res.send('Hello Express');
})
app.get('/request', (req, res, next) => {
req.name = '张三';
next();
})
这里如果回调函数中再加入一个next的话,可以把请求传给下一个中间件处理,为了更好理解,后面将再举一个例子。
2.app.use接收所有类型的请求
例:
app.use('/admin', (req, res, next) => {
// let isLogin = false;
let isLogin = true;
if (isLogin) {
// 如果登录了让请求继续向下执行
next();
} else {
// 如果没有响应一个结果
res.send('您还没有登录 不等访问admin这个页面')
}
})
当我们拦截了请求之后,我们还想让后面的中间件继续处理这个请求,我们可以用next,但是用之前一定要先传入next
3.app.post
const bodyParser = require('body-parser');
//拦截所有请求
app.use(bodyParser.urlencoded({extended: false}));
//再内部用系body-parser方式来处理post请求参数
//如果true方法内部用第三方模块qs来处理请求参数
app.post('/add', (req, res) => {
res.send(req.body);
// req.body为bodyparser在req中添加的属性
})
express为我们提供了req.query方法处理get请求参数。(网上说是nodejs自带的方法,可是我在没有express的文件中使用发现值为undefined=。=)
2.模板引擎art-template与express-art-template
先在项目的目录下创建一个名为views的文件夹
// 告诉express框架模板所在的位置
app.set('views', path.join(__dirname, 'views'));
//告诉express模板的默认后缀
app.set('view engine', 'art');
//告诉express渲染后缀为art时,使用的渲染引擎是什么
app.engine('art', require('express-art-template'));
a.日期转换模块dataFormat
在模块下有template.defaults.imports.xxx=xxx(其中xxx为想要加入到模板中的方法,在模板中可以直接使用了);
//导入dateformat第三方模块
//要对模板引擎进行配置向外部开放变量,在模板内部才能调用该方法
const dateFormat = require('dataformat');
//导入art-template
const template = require('art-template');
//向模板内部导入dataformat变量
template.defaults.imports.dateFormat = dateFormat;
//开放静态资源文件
app.use(express.static(path.join(__dirname, 'public')));
开放静态资源文件,当接到需要静态资源的请求时,自动返回相应的静态资源,括号内为文件所在的上级目录,由于app.js处于顶级目录,而静态资源都存放在public里面所以这么写。
此时需要注意的是,当我们返回模板的时候,里面外链的css和img的路径还是相对路径例如:
<link rel="stylesheet" href="lib/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="css/base.css">
此时的路径是相对路径,但不一定会报错(请求地址与静态文件所在的目录相同的情况下)
假设我们当前的请求路径是/admin/login,而css的路径/blog/public/admin/css/bass.css的话,绝对路径和相对路径的结果是相同的,但如果我们的请求路径改变的话,就无法完成静态资源的渲染了,
所以在这里我们把css的地址改一改
<link rel="stylesheet" href="/admin/css/base.css">
博客管理与文章发布系统-第三方模块及其用法Part1的更多相关文章
- scribefire 多博客管理利器 安装详解
scribefire 多博客管理利器 安装详解 一.ScribeFire介绍 ScribeFire 是 Firefox (火狐浏览器)上著名的博客写作工具,目前已跨平台支持多浏览器(Firefox,C ...
- 在CSDN开通博客专栏后如何发布文章(图文)
今天打开电脑登上CSDN发现自己授予了专栏勋章,有必要了解如何在专栏发布文章. 很感谢已经有前辈给出了图文教程,此文章转载自博客:http://blog.csdn.net/upi2u/article/ ...
- 如何用word文档在博客里发表文章
目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第十二节)
好的,那么在上一节中呢,评论功能的后台已经写好了,这一节,先把这部分后台代码和前台对接一下. 1.评论功能实现 我们修改一下保存评论按钮的点击事件,用jQuery的方式获取文本框中的值,然后通过aja ...
- python爬取博客圆首页文章链接+标题
新人一枚,初来乍到,请多关照 来到博客园,不知道写点啥,那就去瞄一瞄大家都在干什么好了. 使用python 爬取博客园首页文章链接和标题. 首先当然是环境了,爬虫在window10系统下,python ...
- Linux下使用 github+hexo 搭建个人博客05-next主题接入评论系统
静态站点拥有一定的局限性,因此我们需要借助于第三方服务来扩展我们站点的功能. 而评论系统是最常用于和网站用户交流的,因此本章讲解在 next 主题,如何接入评论系统. 参考网站:Next 使用文档,第 ...
- Vue实战狗尾草博客管理平台第四章
本章主要内容如下: 填补上期的坑. iconfont仓库的关联,引入. 开发登录页面 填坑 上期中我们功能都已正常使用.但不知道有没有小伙伴测试过error页面,当访问地址不存在时,路由是否能正常挑战 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试 系列目录 我想测试EF在一百万条数据下的显示时间! ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(36)-文章发布系统③-kindeditor使用
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(36)-文章发布系统③-kindeditor使用 我相信目前国内富文本编辑器中KindEditor 属于前 ...
随机推荐
- CF1285 --- Dr. Evil Underscores
CF1285 --- Dr. Evil Underscores 题干 Today as a friendship gift, Bakry gave Badawy \(n\) integers \(a_ ...
- vue中递归组件的使用
2019独角兽企业重金招聘Python工程师标准>>> 递归 简单来讲就是程序自己调用自身. vue中的递归组件就是,组件自身调用自身. 父组件 <template> & ...
- 深入理解Mysql——锁、事务与并发控制
本文对锁.事务.并发控制做一个总结,看了网上很多文章,描述非常不准确.如有与您观点不一致,欢迎有理有据的拍砖! mysql服务器逻辑架构 每个连接都会在mysql服务端产生一个线程(内部通过线程池管理 ...
- BurpSuite 扩展开发[1]-API与HelloWold
园长 · 2014/11/20 15:08 0x00 简介 BurpSuite神器这些年非常的受大家欢迎,在国庆期间解了下Burp相关开发并写了这篇笔记.希望和大家分享一下JavaSwing和Burp ...
- Centos7网络配置( 网关、dns、ip地址配置)
0.前提:设置VMware的虚拟网络编辑器 子网和网关设置 虚拟网络编辑器 1.配置DNS(可忽略) $vim /etc/resolv.conf nameserver 192.168.0.1 2. ...
- Redis 6.0 新特性-多线程连环13问!
Redis 6.0 来了 在全国一片祥和IT民工欢度五一节假日的时候,Redis 6.0不声不响地于5 月 2 日正式发布了,吓得我赶紧从床上爬起来,学无止境!学无止境! 对于6.0版本,Redis之 ...
- Java——字节和字符的区别
字节 1.bit=1 二进制数据0或1 2.byte=8bit 1个字节等于8位 存储空间的基本计量单位 3.一个英文字母=1byte=8bit 1个英文字母是1个字节,也就是8位 4.一个汉字= ...
- jQuery中bind()与on()绑定事件的区别
.on()方法比.bind()方法多一个参数selector .on()的selector参数是筛选出调用.on()方法的dom元素的指定子元素,如: $("ul").on('cl ...
- 浅析java中ClassLoader如何加载Class
我的博客地址:https://blog.csdn.net/qq_41907991 ClassLoader是一个经常出现又让很多人望而却步的词.本文试图以最浅显易懂的方式来讲解ClassLoader,希 ...
- Istio的流量管理(概念)(istio 系列二)
Istio的流量管理(概念) 目录 Istio的流量管理(概念) 概述 Virtual services 为什么使用virtual service Virtual services举例 hosts字段 ...