用Node.JS+MongoDB搭建个人博客(万众期待的router.js)(四)
万众期待的router.js,是我现在最想写的一个博客。因为他包含了整个个人博客的精髓。在这里,所有的请求配置,返回的参数等等所做的业务逻辑都在这个文件里实现。
我会详细说明这些代码的作用,所以这篇博客会有点长,但看完之后受益肯定也不少!
第一部分:引用文件

formidable是一个很出名的NPM包。它在node里作为表单内容接收做处理的一个中间件,功能很强大。
db.js是我在网上仿写的一个对数据库的统一操作的函数库。
md5是用于数据加密的文件(现在反对用md5加密,因为可以被破解)推荐用哈希算法加密的中间件Crypto
fs是nodejs自带的一个文件管理,全名叫 fileSystem
moment是一个时间格式化的中间件
第二部分:注册组件
app是引用Express 然后引用Express里的get和post方法,由代码可以看出:第一个参数是路由设置 第二个参数就是请求处理函数。而下面代码就是引用router文件下的showRegister函数

exprots是ES6的新写法,可以在外面暴露这个函数,要引用这个函数前提是要引用这个文件
也就是下面这段代码引用

NodeJS都是回调!NodeJS都是回调!NodeJS都是回调!(重要事情说三遍)
所有请求处理函数 都会接收三个参数:request(请求),response(回应),result(结果)
nodejs里有内置的render函数,可指定模板文件。而文件格式只能是ejs。
doRegister函数
首先实例化formidable的IncomingForm,实例化对象变量名为form
引用实例化对象下的parse方法(接收两个参数:第一个,req,第二个,函数【我们要做的事情】)
所得到的表单信息都在fields里面,err参数就是错误信息,files就是文件信息
取到值之后就定义一个变量存储。密码加上双重MD5加密(然而并没有用,还是会被人破解。MD5不再安全)
然后用db外置函数insertOne来向数据库新增一条数据,参数:(表名字,要存储的JSON,回调函数)
而回调函数里又接收两个参数(是不是崩溃了?是就对了,因为我当初也崩溃了。)参数:(错误信息,结果)
如果错误则返回错误信息,成功就执行session设置并返回注册成功信息
第三部分:登录组件

操作与doRegister函数差不多,不一样的就是查询数据的时候,需要匹配账号和密码是否正确,登录成功之后都要写上session。
第四部分:编写文章组件

首先访问该URL要判断是否有session,没有session就是代表没有登录,需要登录。
服务器有session了,就渲染这个模板。
编写文章:有人可能疑问,为什么将文章添加到数据库需要查询所有的文章呢?
主要我还是想写个自增ID,想要文章的ID号。NodeJS里没有自增ID。只有随机的ID编号。
然后存储的数据都是以JSON的格式,我都以语义化来命名,大家也看得清楚明白。
第五部分:获取用户地理位置组件

在这里我用了查询网的API通过IP地址来判断访问者当前地理位置和客户端的信息。
因查询网的定位不准确,我又找了个高德的游览器定位来做了这个功能。
这里是在首页使用Ajax把数据发送到NodeJS接口来存储访问者的当前地理位置
第六部分:分类组件

在这个分类组件里,其余的都是一样,只是查询的时候多出了个条件。classify为JavaScript,就实现了文章分类的效果。
以上。
用Node.JS+MongoDB搭建个人博客(万众期待的router.js)(四)的更多相关文章
- 用Node.JS+MongoDB搭建个人博客(页面模板)(五)(结束)
<差不多先生> 我是差不多先生,我的差不多是天生.也代表我很天真,也代表我是个闲人.这差不多的人生,总是见缝插针. 求学的道路上总是孤独的,即使别人不理解我,认为我是奇葩!但没关系,我会坚 ...
- 用Node.JS+MongoDB搭建个人博客(成品展示)
在博客里可以随意畅写和分享自己喜欢的技术,和网友分享知识也是一种提升.根据自己所发表的博客也能更加加深印象. 与此同时写博客也可以提高自己的写作能力(虽然不咋地),但我相信博客只会越写越有质量的. 博 ...
- 用Node.JS+MongoDB搭建个人博客(安装环境)(一)
Node.JS是什么? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Nod ...
- 用Node.JS+MongoDB搭建个人博客(model目录)(三)
model目录主要是封装一些经常使用的方法,便于使用. setting.js文件: 很简单,就单单封装了一个url作为公用,以后改就方便改了. md5.js(不推荐用): db.js文件: db.js ...
- 用Node.JS+MongoDB搭建个人博客(app.js接口文件)(二)
app.js的GitHub地址:用力戳我然后点个star 说个题外话,THINKPHP是通过一个index.php来引入文件,所以被称为接口文件. 而NodeJS也有这样的接口文件,通常也会放在根目录 ...
- 利用GitHub+Node.js+Hexo搭建个人博客
本篇是自己在搭建Hexo博客平台时的一个过程记录.(2019.9.13实测有效) GitHub 账号注册 因为此文所搭建的个人博客是基于GitHub平台服务的,所以首先是注册GitHub,当然已有账号 ...
- Hexo和github搭建个人博客 - 朱晨
GitHub账号 mac/pc 环境 12 node.jsgit 创建GitHub仓库 登陆GitHub,创建一个新的Respository Repository name叫做{username}.g ...
- 使用Node.js+Hexo+Github搭建个人博客
一.为什么要花时间去搭建个人博客? 首先说说为什么我想要尝试着去搭建属于自己的Blog,古人云:“好记性不如烂笔头”.一开始我把笔记做在本子上.电脑上,发现要用的时候特别地不方便,而且越记越多.越多越 ...
- 基于Hexo+Node.js+github+coding搭建个人博客——基础篇
附上个人教程:http://www.ookamiantd.top/2017/build-blog-hexo-base/ 搭建此博客的动机以及好处在此就不多谈了,之前已经表达过,详情请看Start My ...
随机推荐
- NetCloud——一个网易云音乐评论抓取和分析的Python库
在17的四月份,我曾经写了一篇关于网易云音乐爬虫的文章,还写了一篇关于评论数据可视化的文章.在这大半年的时间里,有时会有一些朋友给我发私信询问一些关于代码方面的问题.所以我最近抽空干脆将原来的代码整理 ...
- c#基础(一)
一. C#与.Net的关系 C#是一种相当新的编程语言.C#的重要性体现在以下两个方法: 1).它是专门为Microsoft的.net FrameWork一起使用而设计的 (.net FrameWor ...
- css选择器:nth-child()与:nth-of-type()的差异
:nth-child()和:nth-of-type()都是Css3中的伪类选择器,其作用相似却又不完全相同. 名词解释 :nth-child()选择器匹配其父元素的第n个子元素,不论元素类型. :nt ...
- template.helper()方法
上一篇文章我们已经讲到了helper()方法,但是上面的例子只是一个参数的写法,如果是多个参数,写法就另有区别了. <div id="user_info"></d ...
- Linux(CentOS)挂载NTFS格式的U盘、移动硬盘
以下操作均在root下执行的 1.U盘挂载 mkdir /mnt/usb //创建一个目录,用于挂载U盘 fdisk -l //查看系统中挂载的U盘,若系统有一块硬盘sdb1 代表你的U盘,/dev/ ...
- Eclipse EE遇到问题记录
Eclipse EE可以进行Java web的开发,下面记录了使用Eclipse EE调试时遇到的一些问题. 1.tomcat启动timeout的设置,双击server,主窗口就变为了server的配 ...
- BZOJ 2707: [SDOI2012]走迷宫 [高斯消元 scc缩点]
2707: [SDOI2012]走迷宫 题意:求s走到t期望步数,\(n \le 10^4\),保证\(|SCC| \le 100\) 求scc缩点,每个scc高斯消元,scc之间直接DP 注意每次清 ...
- POJ 2079 Triangle [旋转卡壳]
Triangle Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 9525 Accepted: 2845 Descript ...
- Dapper入门教程(二)——执行非查询语句
描述 你可以从任意实现IDbConnection的类对象中调用Dapper的扩展方法"Execute".它能够执行一条命令(Command)一次或者多次,并返回受影响的行数.这个方 ...
- 张高兴的 Windows 10 IoT 开发笔记:部署 ASP.NET Core 2 应用
今天是大年初二,都去走亲戚了吧,享受一下这难得的能和亲友相聚的时光.而我就不一样了,今天一回到家就又开始瞎折腾了,哈哈哈. 问题背景 最近花了点时间用 ASP.NET Core 2 写了个个人博客,中 ...