万众期待的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)(四)的更多相关文章

  1. 用Node.JS+MongoDB搭建个人博客(页面模板)(五)(结束)

    <差不多先生> 我是差不多先生,我的差不多是天生.也代表我很天真,也代表我是个闲人.这差不多的人生,总是见缝插针. 求学的道路上总是孤独的,即使别人不理解我,认为我是奇葩!但没关系,我会坚 ...

  2. 用Node.JS+MongoDB搭建个人博客(成品展示)

    在博客里可以随意畅写和分享自己喜欢的技术,和网友分享知识也是一种提升.根据自己所发表的博客也能更加加深印象. 与此同时写博客也可以提高自己的写作能力(虽然不咋地),但我相信博客只会越写越有质量的. 博 ...

  3. 用Node.JS+MongoDB搭建个人博客(安装环境)(一)

    Node.JS是什么? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Nod ...

  4. 用Node.JS+MongoDB搭建个人博客(model目录)(三)

    model目录主要是封装一些经常使用的方法,便于使用. setting.js文件: 很简单,就单单封装了一个url作为公用,以后改就方便改了. md5.js(不推荐用): db.js文件: db.js ...

  5. 用Node.JS+MongoDB搭建个人博客(app.js接口文件)(二)

    app.js的GitHub地址:用力戳我然后点个star 说个题外话,THINKPHP是通过一个index.php来引入文件,所以被称为接口文件. 而NodeJS也有这样的接口文件,通常也会放在根目录 ...

  6. 利用GitHub+Node.js+Hexo搭建个人博客

    本篇是自己在搭建Hexo博客平台时的一个过程记录.(2019.9.13实测有效) GitHub 账号注册 因为此文所搭建的个人博客是基于GitHub平台服务的,所以首先是注册GitHub,当然已有账号 ...

  7. Hexo和github搭建个人博客 - 朱晨

    GitHub账号 mac/pc 环境 12 node.jsgit 创建GitHub仓库 登陆GitHub,创建一个新的Respository Repository name叫做{username}.g ...

  8. 使用Node.js+Hexo+Github搭建个人博客

    一.为什么要花时间去搭建个人博客? 首先说说为什么我想要尝试着去搭建属于自己的Blog,古人云:“好记性不如烂笔头”.一开始我把笔记做在本子上.电脑上,发现要用的时候特别地不方便,而且越记越多.越多越 ...

  9. 基于Hexo+Node.js+github+coding搭建个人博客——基础篇

    附上个人教程:http://www.ookamiantd.top/2017/build-blog-hexo-base/ 搭建此博客的动机以及好处在此就不多谈了,之前已经表达过,详情请看Start My ...

随机推荐

  1. JAVA并发编程学习笔记------FutureTask

    FutureTask是Future和Callable的结合体.传统的代码是这样写的Future f = executor.submit(new Callable()); 然后通过Future来取得计算 ...

  2. 面向对象编程之super内置函数的用法

    先来看一段代码: 定义一个名叫People的父类,又定义了一个叫Teacher的老师类和一个叫Student的学生类 来继承People的类,并根据这两个子类实例化出两个对象s1和t1. class ...

  3. iOS-CYLTabBarController【好用的TabbarController】

    用TabbarController进行模块分类和管理,这里推荐一个CYLTabBarController,只需两个数组就可以使用和管理: 1.导入CYLTabBarController 使用cocoa ...

  4. 转换number为千分位计数形式js

    JS实现转换千分位计数 350000.00-------350,000.00 var num=0;function format (num) { return (num.toFixed(2) + '' ...

  5. Hadoop学习笔记二

    一.设置无密码sudo权限,不用在普通用户和root用户间来回切换 chmod u+w /etc/sudoers vim /etc/sudoers #首行添加如下的内容: hadoop ALL=(ro ...

  6. BZOJ 3670: [Noi2014]动物园 [KMP]

    求这玩意: 对于字符串S的前i个字符构成的子串,既是它的后缀同时又是它的前缀,并且该后缀与该前缀不重叠,将这种字符串的数量记作num[i] 对1,000,000,007取模的结果 n≤5,L≤1,00 ...

  7. Linux 下编写服务器程序时关于Address already in use 的小错误

    新手,,学习linux服务器编程的时候,bind()函数出现了Address already in use 的错误,这是因为上一次bind过后,还未释放,,只要在socket和bind之间加一个函数就 ...

  8. 如何使用JS实现banner图滚动

    通过JS实现banner图的滚动主要是定时器的应用 先新建好banner图的几张图片,最后一张与第一张用同一个,保证滚动的不间断 改好样式,需注意所有图片要在同行显示,否则不能向左滚动 声明一个函数, ...

  9. 开始使用PHPUnit单元测试

    何为单元测试: 指对软件中的基本单元进行测试,如函数.方法等,以检查其返回值或行为是否符合预期:实际中软件是很复杂的,由许多组件构成,执行流程连贯在一起,要进行单元片段的测试,就需要为其提供执行上下文 ...

  10. 洛谷P4014 分配问题【最小/大费用流】题解+AC代码

    洛谷P4014 分配问题[最小/大费用流]题解+AC代码 题目描述 有 n 件工作要分配给 n 个人做.第 i 个人做第 j 件工作产生的效益为c ij. 试设计一个将 n 件工作分配给 n 个人做的 ...