写个帖子记录一下自己写的第一个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. SaltStack的数据系统

    一.SaltStack数据系统的分类 1.Grains(收集的是静态数据) 官方使用文档:https://www.unixhot.com/docs/saltstack/topics/targeting ...

  2. bootstrap-导航(垂直分组)

    1.运行效果如图所示 2.实现代码如下 <!DOCTYPE html> <html> <head>     <meta charset="utf-8 ...

  3. Cobbler自动装机试验

    Cobbler自动装机简介:Cobbler是一个使用Python开发的开源项目,通过将部署系统所涉及的所有服务集中在一起,来提供一个全自动的批量快速建立Linux系统的网络安装环境.Cobbler提供 ...

  4. Codeforces Round #618 (Div. 2)-B. Assigning to Classes

    Reminder: the median of the array [a1,a2,-,a2k+1] of odd number of elements is defined as follows: l ...

  5. 面试中的volatile关键字

    在Java的面试当中,面试官最爱问的就是volatile关键字相关的内容.经过多次面试之后,你是否思考过,为什么他们那么爱问volatile关键字相关的问题?而对于你,如果作为面试官,是否也会考虑采用 ...

  6. 学习笔记之pip的基本使用

    粗略学习了pip的基础知识,便将此作为学习笔记记录下来同样希望分享的能帮到大家! 如果自己电脑没有pip,小澈在此分享如何安装,解决办法很多呢 1.使用easy_install安装: 各种进入到eas ...

  7. 首次使用AWS服务器EC2

    AWS有一年的免费套餐,这个便宜我得占. 申请的时候需要填写银行卡,AWS暂不支持储蓄卡,只好绑信用卡了. 创建EC2实例之后,下一个要解决的问题就是远程root访问. 1. 修改安全组设置 2. s ...

  8. 王颖奇 20171010129《面向对象程序设计(java)》第十二周学习总结

    实验十二  图形程序设计 理论: 10.1 AWT与Swing简介 10.2 框架的创建10.3 图形程序设计10.4 显示图像 (具体学习总结在最后) 实验: 实验时间 2018-11-14 1.实 ...

  9. hive元数据报错?试了很多方法都没辙?也许你漏了这一步

    进入hiveCLI后,输入show databases; 显示 FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveExc ...

  10. MOS管、PCB、H桥、步进电机驱动电路、51单片机的IO口驱动能力、灌电流、拉电流、上拉电阻的选择

    嵌入式开发PCB设计几点体会(转载):http://bbs.ednchina.com/BLOG_ARTICLE_3021801.HTMCollector-Emitter Saturation Volt ...