0

有没有办法从作为请求参数传递的 String 执行函数并在 node.js 中返回结果?想象一个包含字符串的请求:

"db.users.find()"

作为参数

如果我知道我想执行这个语句,我会这样做:

db.collection('users', function(err, collection) {
    collection.find().toArray(function(err, items) {
        res.send(items);
    });
});

我想要的是类似于解析器的东西,它将执行给定的语句并返回结果。

我试过这样:

exports.execStatement = function(req, res) {
//var statemnet = req.params.statement;
  var statement = "collection.find().toArray(function(err, items) {
        res.send(items);});";
  db.collection('users', function(err, collection) {        
    eval(statement)
   });
};

这段代码给了我错误:

var statement = "collection.find().toArray(function(err, prdel) { ...
SyntaxError: Unexpected token ILLEGAL

怎么了 ?为什么我不能执行存储在 String 中的代码?在此工作之后,我想弄清楚如何执行在请求中作为参数传递的代码。

这种方法甚至可能吗?

4

1 回答 1

0

第二个示例显示了如何将函数添加到数据库。

http://mongodb.github.com/node-mongodb-native/api-generated/db.html#eval

但是不要。主要原因有三个

  1. 在 2.2 和更早的版本中,SpiderMonkey 是单线程的,这意味着您的“存储过程”性能极差
  2. eval 在操作期间需要一个写锁(除非你专门设置了 nolock 然后你最好不要写,否则它会失败)。这将停止数据库上的所有写操作,直到您的函数完成执行。
  3. 注入攻击,但上面已经介绍过了。
于 2013-02-22T11:03:07.683 回答