• DoraCMS 源码知识点备注


    项目需要研究了下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)
                        }
                    })
                }
            });
        }
  • 相关阅读:
    20145220韩旭飞《网络对抗》第一周学习
    学号20145220假期复习
    最简单易懂的Idea搭建SSM项目过程和配置(文末有demo哦)
    Navicate快捷键
    String.format()方法
    tomcat点击startup.bat出现闪退
    Shiro使用总结
    layer弹出层icon图标记录
    传统javabean与spring中的bean的区别【转】
    在Spring + SpringMVC + mybatis架构的项目基础上集成Shiro
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/5761892.html
Copyright © 2020-2023  润新知