近期对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,当还存在记录,则返回继续执行,这样可以保证在记录删除完毕之后返回处理结果。
node_modules
就不要放在源码里面了, 有的模块需要编译, 不同的系统间不兼容- 可以多用mongoose的实例和静态方法, 不要在路由里面做大量逻辑操作, 也方便方法的复用
- 进路由的参数都没有过滤, 攻击者可以自己构造mongo查询, 返回意想不到的结果 (keyword: mongodb注入)
- 如上的批量删除别这么写… 可以用mongodb的$in操作符
targetObj.remove({_id: {$in: idsArr}}, callback)
@faceair 明白了,有道理 ,依赖包后面去掉算了,用户可以自己下,进路由的参数确实还没有过滤,确实存在漏洞,我后面优化一下,mongodb的$in操作符,之前还真没用过,我在看一下,targetObj.remove({_id: {$in: idsArr}}, callback) 这种方式确实要简单很多,mongoose的实例和静态方法目前暂时没用,后面我再看一下,感谢! 您看的很仔细,针对这些问题我后面再改改