項目須要研究了下DoraCMS這款開源CMS,真心作的不錯:)。用的框架是經常使用的express 4 + mongoose,代碼也很規範,值得學習。html
源碼中一些涉及到的小知識點備註下:node
https://github.com/doramart/DoraCMSgit
一、Robots協議 github
1)當搜索引擎訪問到網站目錄時,會判斷當前是否存在Robots.txt;
2)若存在則按照該文件的要求來限制訪問;
3)規則:
User-agent: * 這裏的*表明的全部的搜索引擎種類
Disallow: /ABC/ 這裏定義是禁止爬尋ABC目錄下面的目錄
Disallow: /.jpg$ 禁止抓取網頁全部的.jpg格式的圖片
Disallow:/ab/adc.html 禁止爬取ab文件夾下面的adc.html文件
Sitemap: 網站地圖 告訴爬蟲這個頁面是網站地圖redis
二、CMS的實現數據庫
1)利用ueditor及node下插件express
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實現本地上傳的圖片,即保存一個本地的路徑;json
三、利用res.locals 存儲一些全局變量,模板中能夠直接使用緩存
res.locals.logined = req.session.logined;
res.locals.userInfo = req.session.user;
四、站點地圖session
1)、一般是sitemap.xml 存儲整個網站的結構, 可方便網站管理員通知搜索引擎他們網站上有哪些可供抓取的網頁;
2)、在DoraCMS中,sitemap.xml並非本地存儲的文件,而是在用戶訪問時經過讀取數據庫生成,但利用redis緩存,緩存時間爲1天;
即當天的文檔不更新至緩存;
五、利用validator擴展實現校驗
validator.extend('isEn', function (str) { return /^\S+[a-z A-Z]$/.test(str); });
六、使用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) } }) } }); }