一个博客应当具备哪些功能?

前台展示

  • 点击下一页,可以点击分类导航。
  • 可以点击进入到具体博文页面
  • 下方允许评论。显示发表时间。允许留言分页。
  • 右侧有登录注册界面。

后台管理

  • 管理员账号:登陆后看到页面不一样,有后台页面。
  • 允许添加新的分类。从后台添加新的文章。
  • 编辑允许markdown写法。
  • 评论管理。

安装模块

  • Express

    一个简洁灵活的node.js WEB应用框架,提供一系列强大的特性帮助我们创建web应用。

  • Mongodb

    用于保存产生的数据

  第三方模块和中间件:

  • bodyParser,解析post请求数据
  • cookies:读写cookie
  • swig:模板解析引擎
  • mongoose:操作Mongodb数据
  • markdown:语法解析生成模块

创建应用

const express=require('express')
const app=express()
app.get('/',(req,res,next)=>{
  res.send('<h1>欢迎光临我的博客!</h1>')            // req:request对象,保存客户请求相关的一些数据——http.request                               // res:response对象,服务端输出对象,停工了一些服务端相关的输出方法——http.response                               // next:方法,用于执行下一个和路径相匹配的函数(行为)。
})
app.listen(8010,()=>{
  console.log('123')
})

在Express框架下,可以通过app.get()app.post()等方式,把一个url路径和(1-n)个函数进行绑定。当满足对应的规则时,对应的函数将会被执行,该函数有三个参数res,req,next

模板引擎的配置和使用

// 定义模板引擎,使用swig.renderFile方法解析后缀为html的文件
var swig=require('swig');
app.engine('html',swig.renderFile);

// 设置模板存放目录
app.set('views','./views');
// 注册模板引擎
app.set('view engine','html');

swig.setDefaults({cache:false});

配置模板的基本流程是:

请求swig模块=>定义模板引擎=>注册模板引擎=>设置调试方法

我们可以使用var swig=require('swig');定义了swig方法。

以下进行逐行解析——

定义模板引擎

app.engine('html',swig.renderFile);

第一个参数:模板引擎的名称,同时也是模板引擎的后缀,你可以定义打开的是任何文件格式,比如json,甚至tdl等。
第二个参数表示用于解析处理模板内容的方法。
第三个参数:使用swig.renderFile方法解析后缀为html的文件。

设置模板目录

现在就用express组件提供的set方法标设置模板目录:

app.set('views','./views');

定义目录时也有两个参数,注意,第一个参数必须views!第二个参数可以是我们所给出的路径。因为之前已经定义了模板文件夹为views。所以,使用对应的路径名为./views

注册模板引擎

app.set('view engine','html');

还是使用express提供了set方法。
第一个参数必须是字符串'view engine'
第二个参数和app.engine方法定义的模板引擎名称(第一个参数)必须是一致的(都是“html”)。

在app.get()方法里面,使用res.render()方法重新渲染指定内容

app.get('/',function(req,res,next){

    /*
    * 读取指定目录下的指定文件,解析并返回给客户端
    * 第一个参数:模板文件,相对于views目录,views/index.html
    * */

    res.render('index');
});

这时候,我们定义了返回值渲染index文件,就需要在views文件夹下新创建一个index.html

调试方法

我们在不停止服务器的情况下,重新修改index的文件内容,发现并没有刷新。

什么问题呢?出于性能上考虑,node把第一次读取的index放到了内容中,下次访问时,就是缓存中的内容了,而不是真正的index文件。因此需要重启。

开发过程中,为了减少麻烦,需要取消模板缓存。

swig.setDefaults({cache:false});

当然,当项目上线时,可以把这一段删除掉。

静态文件托管

在网页中经常引入外部css js等外链,直接引入浏览器报错

Refused to apply style from 'http://localhost:8010/public/css/base.css' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.

问题不在于css.css是否存在,而在于请求失败。因为外链文件本质也是一个请求,但是在app.js中还没有对应设置。

app.get('/css.css', function (req,res,next) {
    res.setHeader('content-type','text/css');
    res.send('body {background: red;}');
});

静态文件托管目录

最好的方法是,把所有的静态文件都放在一个public的目录下,划分并存放好。

然后在开头就通过以下方法,把public目录下的所有静态文件都渲染了:

app.use('/public',express.static(__dirname+'/public'));

以上方法表示:当遇到public文件下的文件,都调用第二个参数里的方法(注意是两个下划线)。

当用户访问的url以public开始,那么直接返回对应__dirname+'public'下的文件。因此我们的css应该放到public下。

引用方式为:

<link rel="stylesheet" type="text/css" href="../public/css.css"/>

分析

在以上的内容中,我们实现了初始化项目,可以调用html和css文件。基本过程逻辑是:

用户发送http请求(url)=>解析路由=>找到匹配的规则=>指定绑定函数,返回对应内容到用户。

访问的是public:静态——直接读取指定目录下的文件,返回给用户。

=>动态=>处理业务逻辑

基于node.js的博客搭建的更多相关文章

  1. hexo —— 简单、快速、强大的Node.js静态博客框架

    hexo是一款基于Node.js的静态博客框架.目前在GitHub上已有1375 star 和 219 fork. 特性 风一般的速度 Hexo基于Node.js,支持多进程,几百篇文章也可以秒生成. ...

  2. 在阿里云ECS CentOS7上部署基于MongoDB+Node.js的博客

    前言:这是一篇教你如何在阿里云的ECS CentOS 7服务器上搭建一个个人博客的教程,教程比较基础,笔者尽可能比较详细的把每一步都罗列下来,包括所需软件的下载安装和域名的绑定,笔者在此之前对Linu ...

  3. 一个基于Vue.js+Mongodb+Node.js的博客内容管理系统

    这个项目最初其实是fork别人的项目.当初想接触下mongodb数据库,找个例子学习下,后来改着改着就面目全非了.后台和数据库重构,前端增加了登录注册功能,仅保留了博客设置页面,但是也优化了. 一.功 ...

  4. node.js开发博客系统---前端项目搭建(一)

    Express: https://github.com/petecoop/generator-express 安装node.js和npm 执行: npm install -g yo npm insta ...

  5. Node.js开发博客系统

    数据库设计 用户表: id phone password nickname head_img personal_sign level_id create_time update_time is_del ...

  6. Node.js 读取博客首页并获得文章标题

    app.js // 内置http模块,提供了http服务器和客户端功能 var http=require("http"); // 内置文件处理模块 var fs=require(' ...

  7. 基于Hexo的个人博客搭建(下)

    5.服务器端测试 —5.1 clone到/var/www/html git clone /home/git/repos/myblog.git /var/www/html chown -R  git:g ...

  8. 基于Hexo的个人博客搭建(上)

    没有废话,直接开始. 1. 环境配置 —1.1 node.js安装 https://nodejs.org/en/download/ 下载最新版本即可,然后无脑安装(除了选安装目录的时候),为了保证安装 ...

  9. node.js 开发博客系统

    1. 安装yoman :npm install -g yo 2. 安装 generator-express :npm install -g generator-express 3. 安装 bower ...

随机推荐

  1. LeetCode题解之Squares of a Sorted Array

    1.题目描述 2.问题分析 使用过两个计数器. 3.代码 class Solution { public: vector<int> sortedSquares(vector<int& ...

  2. @Autowired注解与@resource注解的区别(十分详细)

    背景: 今天下班路上看到一个大货车,于是想到了装配,然后脑海里跳出了一个注解@Autowired(自动装配),于是又想到最近工作项目用的都是@Resource注解来进行装配.于是本着学什么东西都要一钻 ...

  3. [Hive_add_7] Hive 实现最高气温统计

    0. 说明 Hive 通过 substr() 函数实现最高气温统计 1. Hive 实现最高气温统计 1.1 思路 将一行文本加载为 String 通过 substr() 函数截取年份和温度 1.2 ...

  4. LeetCode算法题-First Unique Character in a String(Java实现)

    这是悦乐书的第213次更新,第226篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第81题(顺位题号是387).给定一个字符串,找到它中的第一个非重复字符并返回它的索引. ...

  5. #010 全年级C语言开始统一刷题了,能否坚持下去?

    不知道这是咋回事吧,这个系统挺不好使得,出现了一个又一个的问题. 使用过程中做题的那个系统自己就崩了,刷新后那道题得了零分. 前面的几道题难度系数也不小,对于我这个新手来说,但是这个系统太坑了.他明码 ...

  6. 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)转载自码农网

    CentOS 是一个工业标准的 Linux 发行版,是红帽企业版 Linux 的衍生版本.你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级.安装新的软件包.配置特定服务和应用程 ...

  7. VS code常用的几个插件

    VScode是一个我最近才开始用的编辑器,在此列几个自己在用的插件,以备换机时的需要. auto close tagbeautify css/sass/scss/lessone dark themes ...

  8. 游览器发送http请求经过的步骤

    OSI参考模型(Open System Interconnection,开放系统互连),全称为开放系统互联参考模型 ,OSI将计算机网络体系结构划分为了七层 TCP/IP协议族(TCP/IP Prot ...

  9. 总结 Linux 下安装 PHP 扩展步骤

    总结一下 Linux 下安装 PHP 扩展步骤,这里以安装 PHP 的 redis 扩展为例. 一.拿到扩展包下载地址,下载扩展包 pecl 上搜索 redis wget http://pecl.ph ...

  10. 路飞学城-Python开发集训-第2章

    学习心得: 这章对编码的讲解超级赞,现在对于编码终于有一点认知了,但还没有大彻大悟,还需要更加细心的琢磨一下Alex博客和视频,以前真的是被编码折磨死了,因为编码的问题而浪费的时间很多很多,现在终于感 ...