从node.js中的String执行函数
Execute function from String in node.js
有没有办法执行作为请求参数传递的String中的函数并在node.js中返回结果?想象一个包含String:的请求
"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
怎么了?为什么我不能执行存储在字符串中的代码?完成这项工作后,我想弄清楚如何执行在请求中作为参数传递的代码。
这种方法可能吗?
第二个例子展示了如何将函数添加到数据库中。
http://mongodb.github.com/node-mongodb-native/api-generated/db.html#eval
但是不要。主要有三个原因
- 在2.2及更早版本中,SpiderMonkey是单线程的,这意味着"存储过程"的性能非常糟糕
- eval在操作期间需要写锁(除非您专门设置了nolock,然后最好不要写,否则会失败)。这将停止数据库上的所有写入操作,直到函数完成执行
- 注射攻击,但上面已经介绍过了
相关文章:
- 如何做到这一点,使代码在不传递条件后执行函数
- javascript自执行函数-不同的语法
- JavaScript:只有当数组中的所有项都为true时才执行函数
- iFrame url更改时执行函数
- 为什么AngularJS在每个摘要循环上都执行函数
- 如何使用setInterval执行函数
- 当*ngFor以角度2结束时执行函数
- Ajax调用完成后如何执行函数
- 在显示引导弹出窗口之前执行函数
- 从自执行函数返回函数的Javascript性能命中率
- 在操作完成时执行函数
- jquery/js中的自执行函数
- 如何仅在完成对gap.client.youtube的请求.execute后执行函数
- 构造函数函数中的自执行函数的OO上下文/范围
- Javascript未使用=运算符执行函数
- AngularJS:如何按照预定义的顺序执行函数
- 在不使用隔离作用域的情况下执行函数的角度指令
- 如何在页面加载后执行函数是在 AngularJS 中完成的
- 完成页面加载后执行函数
- 如何在完成完全执行函数后触发循环