DoraCMS版本更新V1.0.4
发布于 9 年前 作者 doramart 3526 次浏览 最后一次编辑是 8 年前 来自 分享

174726_d78c4a23_352304.jpeg

近期对DoraCMS进行了bug修复和功能更新,主要包括以下几方面:

  • 1、抽取出了后台的搜索模块

  • 2、加入了批量删除功能

  • 3、标签模块修复了搜索bug

  • 4、修复前台icon图标不显示的问题

  • 5、后台添加了登录日志管理

  • 6、后台数据加载加入了loading

  • 7、统一了后台数据显示表格样式

  • 8、修复了时间格式化问题(上午和下午显示的小时数一致)

  • 9、修复了管理首页留言记录样式问题

  • 10、删除单条记录和批量删除提取为公共js

  • 11、修复了一个兄弟提到的保存记录没有容错处理的问题

  • 12、修复了一些小bug。

更新主要针对后台模块,主要提取了一些公共js,尽量减少冗余代码,另外加入了批量删除的功能。在这里简要说明一下批量删除的处理方式——递归。看主要代码:

var params = url.parse(req.url,true);
var ids = params.query.ids;
var idsArr = ids.split(',');
var batchDel = function(targetId,n){
    targetObj.remove({'_id':targetId},function(err){
        if(err){
            res.end(err);
        }else{
            idsArr.splice(n,1);
            if(idsArr.length > 0){
                for(var i=0;i<idsArr.length;i++){
                    batchDel(idsArr[i],i);
                }
            }else{
                res.end("success");
            }
 
        }
    });
};
batchDel(idsArr[0],0);

删除第一条记录之后,查询剩下的目标id,当还存在记录,则返回继续执行,这样可以保证在记录删除完毕之后返回处理结果。

DoraCMS源码下载

8 回复

酷,继续加油,争取做node里的第一cms

不错不错

@i5ting 3Q 会继续努力!!

为啥要递归呢

  1. node_modules 就不要放在源码里面了, 有的模块需要编译, 不同的系统间不兼容
  2. 可以多用mongoose的实例和静态方法, 不要在路由里面做大量逻辑操作, 也方便方法的复用
  3. 进路由的参数都没有过滤, 攻击者可以自己构造mongo查询, 返回意想不到的结果 (keyword: mongodb注入)
  4. 如上的批量删除别这么写… 可以用mongodb的$in操作符 targetObj.remove({_id: {$in: idsArr}}, callback)

@faceair 明白了,有道理 ,依赖包后面去掉算了,用户可以自己下,进路由的参数确实还没有过滤,确实存在漏洞,我后面优化一下,mongodb的$in操作符,之前还真没用过,我在看一下,targetObj.remove({_id: {$in: idsArr}}, callback) 这种方式确实要简单很多,mongoose的实例和静态方法目前暂时没用,后面我再看一下,感谢! 您看的很仔细,针对这些问题我后面再改改

@luoyjx faceair介绍的方法好像可以,我再改改,这种递归确实麻烦了

回到顶部