项目需要研究了下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) } }) } }); }