基于node.js的博客搭建
一个博客应当具备哪些功能?
前台展示
- 点击下一页,可以点击分类导航。
- 可以点击进入到具体博文页面
- 下方允许评论。显示发表时间。允许留言分页。
- 右侧有登录注册界面。
后台管理
- 管理员账号:登陆后看到页面不一样,有后台页面。
- 允许添加新的分类。从后台添加新的文章。
- 编辑允许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的博客搭建的更多相关文章
- hexo —— 简单、快速、强大的Node.js静态博客框架
hexo是一款基于Node.js的静态博客框架.目前在GitHub上已有1375 star 和 219 fork. 特性 风一般的速度 Hexo基于Node.js,支持多进程,几百篇文章也可以秒生成. ...
- 在阿里云ECS CentOS7上部署基于MongoDB+Node.js的博客
前言:这是一篇教你如何在阿里云的ECS CentOS 7服务器上搭建一个个人博客的教程,教程比较基础,笔者尽可能比较详细的把每一步都罗列下来,包括所需软件的下载安装和域名的绑定,笔者在此之前对Linu ...
- 一个基于Vue.js+Mongodb+Node.js的博客内容管理系统
这个项目最初其实是fork别人的项目.当初想接触下mongodb数据库,找个例子学习下,后来改着改着就面目全非了.后台和数据库重构,前端增加了登录注册功能,仅保留了博客设置页面,但是也优化了. 一.功 ...
- node.js开发博客系统---前端项目搭建(一)
Express: https://github.com/petecoop/generator-express 安装node.js和npm 执行: npm install -g yo npm insta ...
- Node.js开发博客系统
数据库设计 用户表: id phone password nickname head_img personal_sign level_id create_time update_time is_del ...
- Node.js 读取博客首页并获得文章标题
app.js // 内置http模块,提供了http服务器和客户端功能 var http=require("http"); // 内置文件处理模块 var fs=require(' ...
- 基于Hexo的个人博客搭建(下)
5.服务器端测试 —5.1 clone到/var/www/html git clone /home/git/repos/myblog.git /var/www/html chown -R git:g ...
- 基于Hexo的个人博客搭建(上)
没有废话,直接开始. 1. 环境配置 —1.1 node.js安装 https://nodejs.org/en/download/ 下载最新版本即可,然后无脑安装(除了选安装目录的时候),为了保证安装 ...
- node.js 开发博客系统
1. 安装yoman :npm install -g yo 2. 安装 generator-express :npm install -g generator-express 3. 安装 bower ...
随机推荐
- Linux中对逻辑卷的移除
移除前先df -mT 看一下:(在上一篇的基础上:Linux中对逻辑卷进行扩容) 1.取消挂载同时删除/etc/fstab下的记录 取消挂载 umount /dev/zhi/lv-zhi 删除记录 v ...
- [20181109]12cR2 的pre_page_sga参数
[20181109]12cR2 的pre_page_sga参数.txt --//12CR2改变了参数pre_page_sga设置为True.设置为true有好处也有缺点.--//先看看官方的定义:ht ...
- java中利用dom4j解析XML文件
官网下载Dom4j地址:https://dom4j.github.io/ 注意:使用Dom4j开发,需下载dom4j相应的jar文件 题目:后台利用dom4j解析student.xml文件,并返回Li ...
- xxx.jar或者xxx.war中没有主清单属性和spring-boot-maven-plugin的作用
因为springboot本身集成了tomcat插件,所以我们可以直接使用mvn clean package命令打成jar包或者war包,然后使java -jar xxx.jar 或者 java -ja ...
- 探索SQL Server元数据(二)
背景 上一篇中,我介绍了SQL Server 允许访问数据库的元数据,为什么有元数据,如何使用元数据.这一篇中我会介绍如何进一步找到各种有价值的信息.以触发器为例,因为它们往往一起很多问题. 那么如何 ...
- 内核线程的进程描述符task_struct中的mm和active_mm
task_struct进程描述符中包含两个跟进程地址空间相关的字段mm, active_mm, struct task_struct { // ... struct mm_struct *mm; st ...
- ADV190007 - “PrivExchange” 特权提升漏洞的指南
Microsoft Exchange Server中存在一个特权提升漏洞.成功利用此漏洞的攻击者可能会尝试模仿Exchange服务器的任何其他用户.要利用此漏洞,攻击者需要执行中间人攻击才能将身份验证 ...
- C++多线程同步技巧(一) --- 临界区
简介 C++中关于多线程的内容对于构建工程来说是至关重要的,C++本身也对关于多线程的操作提供了很好的支持.本章笔者就来介绍一下C++有关于多线程的重要知识点---临界区. 临界区的作用 线程就像是进 ...
- Sublime Text 2 配置PHP调试环境(在windows环境下)
1:PHP安装,配置环境变量 PHP安装略过- 2:下载Sublime Text 2 下载地址:http://www.sublimetext.com/2 ,选择自己合适的版本 3:点击 sublime ...
- php学习----数据类型2
Boolean 布尔类型 这是最简单的类型.boolean 表达了真值,可以为 TRUE 或 FALSE. 要明确地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转 ...