项目需要研究了下DoraCMS这款开源CMS,真心做的不错:)。用的框架是常用的express 4 + mongoose,代码也很规范,值得学习。

源码中一些涉及到的小知识点备注下:

https://github.com/doramart/DoraCMS

1、Robots协议 

  1)当搜索引擎访问到网站目录时,会判断当前是否存在Robots.txt;
  2)若存在则按照该文件的要求来限制访问;
  3)规则:
    User-agent: * 这里的*代表的所有的搜索引擎种类
    Disallow: /ABC/ 这里定义是禁止爬寻ABC目录下面的目录
    Disallow: /.jpg$ 禁止抓取网页所有的.jpg格式的图片
    Disallow:/ab/adc.html 禁止爬取ab文件夹下面的adc.html文件
    Sitemap: 网站地图 告诉爬虫这个页面是网站地图

2、CMS的实现

  1)利用ueditor及node下插件

var ueditor = require('ueditor-nodejs');
app.use('/ueditor/ue', ueditor({//这里的/ueditor/ue是因为文件件重命名为了ueditor,如果没改名,那么应该是/ueditor版本号/ue
configFile: '/ueditor/jsp/config.json',//如果下载的是jsp的,就填写/ueditor/jsp/config.json
mode: 'local', //本地存储填写local
accessKey: '',//本地存储不填写,bcs填写
secrectKey: '',//本地存储不填写,bcs填写
staticPath: path.join(__dirname, 'public'), //一般固定的写法,静态资源的目录,如果是bcs,可以不填
dynamicPath: '/upload/blogpicture'
}));

  2)ueditor 将编辑的信息以html格式传入后台并存储在数据库中,上述配置中的dynamicPath实现本地上传的图片,即保存一个本地的路径;

3、利用res.locals 存储一些全局变量,模板中可以直接使用

res.locals.logined = req.session.logined;
res.locals.userInfo = req.session.user;

4、站点地图

  1)、通常是sitemap.xml 存储整个网站的结构, 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页;
  2)、在DoraCMS中,sitemap.xml并不是本地存储的文件,而是在用户访问时通过读取数据库生成,但利用redis缓存,缓存时间为1天;
    即当天的文档不更新至缓存;

5、利用validator扩展实现校验

validator.extend('isEn', function (str) {
return /^\S+[a-z A-Z]$/.test(str);
});

6、使用Redis缓存

getContentsCount : function(req,res,cateParentId,cateQuery,callBack){

        cache.get(settings.session_secret + '_' + cateParentId + '_contentCount',function(contentCount){
if(contentCount) {
callBack(contentCount);
}else{
Content.count(cateQuery,function(err,count){
if(err){
res.end(err);
}else{
cache.set(settings.session_secret + '_' + cateParentId + '_contentCount', count, 1000 * 60 * 60 * 24); // 缓存一天
callBack(count)
}
})
}
});
}

DoraCMS 源码知识点备注的更多相关文章

  1. JFinal 源码知识点

    1.JFinal中自带json工具类,没必要导入其他的转化包. 使用:setAttr("status","success"), renderJson() 会将所 ...

  2. robotium源码方法备注---clicker.java

    1.clickOnScreen(float x,float y) 在屏幕上点击一个指定的区域(x,y)横纵坐标 2.clickLongOnScreen(float x,float y, int tim ...

  3. 一起学习vue源码 - Vue2.x的生命周期(初始化阶段)

    作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...

  4. 你还不知道Vue的生命周期吗?带你从Vue源码了解Vue2.x的生命周期(初始化阶段)

    作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...

  5. jQuery-1.9.1源码分析系列(九) CSS操作

    jquery.fn.css获取当前jQuery所匹配的元素中第一个元素的属性值[$(…).css(cssName),注意这个cssName可以是数组]或给当前jQuery所匹配的每个元素设置样式值[$ ...

  6. Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合(注解及源码)

    Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合(注解及源码) 备注: 之前在Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合中 ...

  7. 【Spring学习】Spring的源码解析之路 ——【step1】基础环境配置 + IDEA快捷键整理

    前导: 本次主要是关于“基础环境搭建”的内容,分为三个部分,(1)查看源码和项目需要的开发集成环境Intellig IDEA的使用,(2)如何导入源码,(3)在这个过程中梳理出的快捷键 正文:==== ...

  8. 高级架构进阶之HashMap源码就该这么学

    引言--面试常见的问题 问:“你用过HashMap,你能跟我说说它吗?” “当然用过,HashMap是一种<key,value>的存储结构,能够快速将key的数据put方式存储起来,然后很 ...

  9. CEF源码编译

    CEF的构造说明:https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding chromium的源码地址:https://c ...

随机推荐

  1. 【知识必备】内存泄漏全解析,从此拒绝ANR,让OOM远离你的身边,跟内存泄漏say byebye

    一.写在前面 对于C++来说,内存泄漏就是new出来的对象没有delete,俗称野指针:而对于java来说,就是new出来的Object放在Heap上无法被GC回收:而这里就把我之前的一篇内存泄漏的总 ...

  2. C语言 · Anagrams问题

    问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"Nuclear ...

  3. javascript之活灵活现的Array

    前言 就如同标题一样,这篇文章将会灵活的运行Array对象的一些方法来实现看上去较复杂的应用. 大家都知道Array实例有这四个方法:push.pop.shift.unshift.大家也都知道 pus ...

  4. 设计模式之行为类模式大PK

                                        行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...

  5. es6小白学习笔记(一)

    1.let和const命令 1.es6新增了let和const命令,与var用法类似,但它声明的变量只在let所在的代码块内有效(块级作用域,es5只有全局和函数作用域) { let a = 1; v ...

  6. oracle常用函数及示例

    学习oracle也有一段时间了,发现oracle中的函数好多,对于做后台的程序猿来说,大把大把的时间还要学习很多其他的新东西,再把这些函数也都记住是不太现实的,所以总结了一下oracle中的一些常用函 ...

  7. 使用C# 和Consul进行分布式系统协调

    随着大数据时代的到来,分布式是解决大数据问题的一个主要手段,随着越来越多的分布式的服务,如何在分布式的系统中对这些服务做协调变成了一个很棘手的问题.今天我们就来看看如何使用C# ,利用开源对分布式服务 ...

  8. Linux 桌面美化那点事儿

    各个 Linux 桌面发行版刚拿到手的时候,或多或少都有点儿不满意,对它们进行一些改造是必须的.网上不乏各种 Linux 桌面美化的教程和经验贴,对我们这些 Linux 爱好者来说都是很好的参考资料. ...

  9. .NET中使用Redis (二)

    很久以前写了一篇文章 .NET中使用Redis 介绍了如何安装Redis服务端,以及如何在.NET中调用Redis读取数据.本文简单介绍如何设计NoSQL数据库,以及如何使用Redis来存储对象. 和 ...

  10. 抛弃jQuery:DOM API之选择元素

    原文链接:http://blog.garstasio.com/you-dont-need-jquery/selectors/ 我的Blog:http://cabbit.me/you-dont-need ...