我正在将webserver从python移植到node.js,服务器必须具备的功能之一是接收包含MongoDB查询信息的帖子,并将查询结果发送到网页。查询可能包含或不包含筛选器、投影、限制和排序。在python中,我们可以这样做:
(在下面的示例中,command_name等于“查找”)
command = getattr(collection, command_name)
cmd_filter = loads(filter_str) if filter_str else None
projection = loads(projection_str) if projection_str else None
limit = loads(limit_str) if limit_str else 0
sort = [(elt['key'], elt['order']) for elt in loads(sort_str)] if sort_str else None
response = command(filter=cmd_filter, projection=projection, sort=sort, limit=limit)
但我很难在node.js中找到这样的方法,我尝试过这样的方法:
command_name = req.body['command']
command = collection[command_name]
command = filter_str != undefined ? collection[command_name](JSON.parse(filter_str)) : collection[command_name]
command = projection_str != undefined ? command['project'](JSON.parse(projection_str)) : command
command = sort_str != undefined ? command['sort'](JSON.parse(sort_str)) : command
command = limit_str != undefined ? command['limit'](JSON.parse(limit_str)) : command
response = command.toArray(function(err, result) {
if (err) throw err
console.log(result)
})
但不起作用。我得到了一个MongoError: Can't canonicalize query: BadValue bad order array [2]
发布于 2017-04-18 04:45:44
在这里,您的代码不起作用是您最不需要解决的问题。我不知道您是否意识到,但是用户可以使用API在数据库上执行任何命令。我不知道是否有这样的名字,但你有一个蒙古注入漏洞。我以前从未见过这样的情况,显式运行的用户在活动数据库中提供了随机数据的随机方法。
为Node中的REST搜索猫鼬分页、排序等,你会发现很多关于如何正确地做它的信息。
有一些模块可以帮助您做到这一点:
https://stackoverflow.com/questions/43472181
复制相似问题