0

我的文档包含错误列表。我有一个视图,它计算具有特定错误的文档的数量,以及具有给定错误的文档的平均错误数。

地图

function (doc) {
var i;
for (i = 0; i < doc.errors.length; i = i + 1){
    emit([doc.errors[i], doc.flummery], [1, doc.errors.length])
}

}

减少

function (key, values, rereduce) {
var avg = [];
var cnt = [];
var i;
for (i = 0; i < values.length; i = i + 1) {
    avg.push(values[i][1]);
    cnt.push(values[i][0]);
}
return [sum(cnt), eval(avg.join("+")) / avg.length]

}

我读过很多次,使用 eval() 是通往疯狂的道路,但我想不出有什么方法可以真正让我绊倒。eval() 在 couchdb 视图中安全吗?

请注意,Oleg 提出了显而易见的答案,即“不要那样做,couchdb 给你一个 sum() 函数”。在这种情况下,显然不需要 eval()。但是,如果我需要它,考虑到我可以很好地控制我的输入,使用它是否安全?

4

1 回答 1

2

不能sum(avg) / avg.length改用吗?

eval调用编译器的全部功能有明显的缺点:除非您仔细清理输入,否则它会占用大量资源并引入很大的安全漏洞。

于 2012-06-14T16:39:38.193 回答