写个帖子记录一下自己写的第一个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');
  // 创建网站服务器
  const app = express();
  // 数据库连接
  require('./model/connet.js');
  // 监听端口
  app.listen(80);
 
 

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的更多相关文章

  1. scribefire 多博客管理利器 安装详解

    scribefire 多博客管理利器 安装详解 一.ScribeFire介绍 ScribeFire 是 Firefox (火狐浏览器)上著名的博客写作工具,目前已跨平台支持多浏览器(Firefox,C ...

  2. 在CSDN开通博客专栏后如何发布文章(图文)

    今天打开电脑登上CSDN发现自己授予了专栏勋章,有必要了解如何在专栏发布文章. 很感谢已经有前辈给出了图文教程,此文章转载自博客:http://blog.csdn.net/upi2u/article/ ...

  3. 如何用word文档在博客里发表文章

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  4. 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第十二节)

    好的,那么在上一节中呢,评论功能的后台已经写好了,这一节,先把这部分后台代码和前台对接一下. 1.评论功能实现 我们修改一下保存评论按钮的点击事件,用jQuery的方式获取文本框中的值,然后通过aja ...

  5. python爬取博客圆首页文章链接+标题

    新人一枚,初来乍到,请多关照 来到博客园,不知道写点啥,那就去瞄一瞄大家都在干什么好了. 使用python 爬取博客园首页文章链接和标题. 首先当然是环境了,爬虫在window10系统下,python ...

  6. Linux下使用 github+hexo 搭建个人博客05-next主题接入评论系统

    静态站点拥有一定的局限性,因此我们需要借助于第三方服务来扩展我们站点的功能. 而评论系统是最常用于和网站用户交流的,因此本章讲解在 next 主题,如何接入评论系统. 参考网站:Next 使用文档,第 ...

  7. Vue实战狗尾草博客管理平台第四章

    本章主要内容如下: 填补上期的坑. iconfont仓库的关联,引入. 开发登录页面 填坑 上期中我们功能都已正常使用.但不知道有没有小伙伴测试过error页面,当访问地址不存在时,路由是否能正常挑战 ...

  8. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试 系列目录 我想测试EF在一百万条数据下的显示时间! ...

  9. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(36)-文章发布系统③-kindeditor使用

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(36)-文章发布系统③-kindeditor使用 我相信目前国内富文本编辑器中KindEditor 属于前 ...

随机推荐

  1. 突然地心血来潮,为 MaixPy( k210 micropython ) 添加看门狗(WDT) C 模块的开发过程记录,给后来的人做开发参考。

    事情是前几天群里有人说做个看门狗不难吧,5分钟的事情,然后我就怼了几句,后来才发现,原来真的没有看门狗模块鸭. 那好吧,那我就写一下好了,今天是(2020年4月30日)想着最后一天了,不如做点什么有价 ...

  2. 【Linux常见命令】sort命令

    sort - sort lines of text files sort命令用于将文本文件内容加以排序. sort可针对文本文件的内容,以行为单位来排序. 语法: sort [OPTION]... [ ...

  3. JavaScript Array every()&some()&reduce()方法

    every()方法测试数组的所有元素是否都通过了指定函数的测试. // 每一项都要满足条件才会返回true,只要有一项不满足返回false var arr = [1, 2, 3, 4]; let bl ...

  4. OSChina 周一乱弹 —— 为什么人类和人工智能定要一战

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2018)请戳(这里) [今日歌曲] @小小编辑:推荐歌曲,又失恋了 - 花粥 <又失恋了>- 花 ...

  5. Mobile Communication

    最近面试有被问到LTE,感觉说得不太清楚,重新整理一遍. 一.第一代移动通信系统 1G,诞生于1980年左右.模拟通信系统,抗干扰性能差,使用FDMA技术,主要用来传输话音信号,最拉风的就是" ...

  6. MAC使用vagrant搭建开发环境

    公司的开发环境是这样的: Windows主机通过虚拟机安装CentOS.平时在Windows下编辑代码,然后跑到虚拟机里编译. 我自己有台MAC,本来准备直接在MAC上装开发环境的.基于以下两个原因放 ...

  7. 一元三次方程 double输出 -0.00

    求一个 a*x*x*x+b*x*x+c*x+d 的解 题目很简单,但是我输出了-0.00,然后就一直卡着,这个问题以后要注意. 让0.00 编程-0.00的方法有很多. 第一种就是直接特判 if(fa ...

  8. 基础JS遇到的一些题01

    1.两种数组去重方法 const unique = arr =>{ let mySet = new Set(arr); /!* let newArr =[]; for (let i = 0 ;i ...

  9. 《深入理解Java虚拟机》第 3 版里面到底多了哪些知识点?本文竟然得到了本书作者的认可!

    这是why的第 47 篇原创文章 荒腔走板 大家好,我是 why.老规矩,先是简短的荒腔走板聊聊生活. 上面的图是前几天拍的,那天晚上下班后,刚刚走进小区就看到了这一轮弯月和旁边那一颗特别特别亮的星星 ...

  10. 一文教你快速修改ubuntu终端显示的主机名和用户名

    为了让终端的显示更加简洁,清爽,改掉显示的用户名和主机名,改成你喜欢的名字. 创作不易,如果本文帮到了您: 如果本文帮到了您,请帮忙点个赞