Tag: eval

从另一个lua脚本加载lua脚本

我为我的node.js项目写了一些lua脚本。 但我的一些lua脚本里面有相同的代码。 让我先解释一下。 我的第一个脚本返回来自redis的给定密钥的所有数据。 script1.lua local data = {}; local keyslist = redis.call('keys', 'day:*'); local key, redisData; for iCtr = 1, #keyslist do key = string.gsub(keyslist[iCtr], 'day:',''); redisData = redis.call('hmget', keyslist[iCtr], 'users'); table.insert(data, {date=key, users=redisData[1]}); end return cjson.encode(data); 我的第二个脚本返回来自redis的相同密钥的前2个logging。 script2.lua local data = {}; local keyslist = redis.call('keys', 'day:*'); local key, redisData; for iCtr = […]

从传递给函数的string中调用一个javascript函数

我在这里看到了类似性质的多个问题,但是没有人会为我具体的东西(即时使用node.js)工作。 所以例如在这里拿这个代码。 function command_call(message, socket) { if (message.length > 1){ var func = message[0]; var string = message.slice(1); var string = string.join(' ')} else{ var func = message[0]; var string = '';}; if(func[0] == '$') { (eval(func.slice(1)))(string, socket);}; }; function say(string, socket){ socket.write(string)}; 如果传递给command_call的消息是“$ say hi”,那么函数会被调用并返回“hi”。 这工作得很好,但是,如果被放到eval的函数不存在,它崩溃。 例如,如果传递给command_call的消息是“$ example blah”,它将尝试评估“example”。 基本上我需要它来检查function是否存在之前它的function。 是的,我想要使用eval,除非有更好的方法来做节点。 再次,这是在node.js

给定一个string格式的函数如何将其转换回到JavaScript中的函数?

说我有一个JavaScript的function var fn = function () { return 6 + 5; }; 然后我做 fn.toString(); 哪个返回 "function () { return 6 + 5; }" 我怎么能把它变成一个函数,并最终在后面调用它。 我已经试过eval就像其他人所说的,但这似乎并没有为我工作。 任何帮助将非常感激!!!

在Eval()中完美的JavaScript语法创build错误

我在Node.js中创build了一个非常原始的在线解释器/编译器,只是为了体验多种语言,而且在运行JS代码时遇到了一个非常奇怪的问题。 当用户发布信息时,我会采取他们的input,稍微转义一下,然后将其直接input到命令行中(可怕的做法,我知道,但是稍后我将转向一个不涉及直接CMD的新系统)转义双引号和\ n,\ r等 当获得input,我child_process.exec命令(是的,我给它一个callback,但这是一个相当长的,我不认为是必要的写) let parentResults = cp.exec(`node ./builders/${this.builder}.js "${this.escapedCode}"`); // First parameter represents the builder to run the user input with // and escaped code is self-explanatory 处理JS的构build器只有一行: eval(process.argv[2]); // Already somewhat-escaped code 现在,当我写这样的东西 function foo(x) { console.log(x); } foo(5); 我在5的控制台中得到正确的输出。 但是当我做类似的事情 let foo = function(x) { console.log(x); } foo(5); 我得到一个错误说 console.log(x); ^ […]

“跳字典”,转换语句,或如何做“跳字典”没有评估?

我喜欢包含键值的“跳字典”的概念,其中值是函数。 不过,我不确定我是否应该喜欢这个概念。 如果if-else if语句,我想replace一个长列表。 (我应该使用switch语句吗?) 有没有一种方法来实现“跳字典”而不使用eval? (我已经阅读了关于为什么eval不好的原因: 为什么使用JavaScript eval函数是一个坏主意? ) 使用eval的例子 function some_func(arg) { console.log('I am a some func') }; function find_my(arg) { console.log('we are looing for your ' + arg); }; var jump = { '1' : 'some_func()', '2' : 'find_my("cat")', '3' : 'find_my("dog")' } eval(jump['3']) eval(jump['2']) eval(jump['1']) 谢谢。

在node.js中,如何以最轻量级的方式检查给定的代码串是否在语法上是正确的?

想象一下,我接受用户的一段代码,只想检查给定的string是否是有效的JS? 仅从语法angular度来看。 function checkCode(x){ // Logic } // returns a boolean, whether 'x' is syntactically right or wrong. 我不想用eval解决scheme,因为当给定的代码“x”在语法上是错误的时候,整个nodejs进程陷入语法错误。

BAAS避免了代码注入

我创build了一个私人BAAS(作为服务的后端)。 它可以使用eval()根据不同的任务逻辑执行不同的JavaScript代码。 我testing了执行javascriptstring和原生nodejs javascript代码的性能。 nodejs和eval(js)之间没有显着的性能差异。 我的代码: var date1=new Date(); //******************javascript code will be executed by eval() var a=0; var j=100000000; for (var i=0; i<=j;i++){ a=a+i*i*30+i/2+i/2; } console.log(a); //****************** var date2=new Date(); var date3=date2.getTime()-date1.getTime() ; console.log(date3); console.log("————————–"); var date1a=new Date(); //******************javascript code executed by eval() eval("var a=0; var j=100000000; for (var i=0; i<=j;i++){ a=a+i*i*30+i/2+i/2; } console.log(a);"); […]

需求不能按预期在vm内工作

下面的代码使用本地节点vm库,它允许您在不同的上下文中计算javascriptstring。 example.js的特定代码有一个javascriptstring,它向Array全局variables添加属性.marker ,值为true ,然后需要文件global.js (见下文),然后loggingArray.marker 。 下面的代码logging为true 。 var vm = require('vm') var code = [ 'Array.marker = true', "require('./global.js')", 'console.log(Array.marker)', // => true ].join('\n') var script = new vm.Script(code, { filename: 'example.js' }) script.runInNewContext({ 'require': require, 'console': console }) 以下是global.js的内容,它是一个将Array.marker的值更改为false的简单模块。 var hi = function () { Array.marker = false } module.exports = hi() 这里应该发生的事情是, […]

在JavaScript中捕获调用者的作用域

这个代码在eval运行的同一个作用域中工作: function compile(fn) { //Actually calls fn.toString() then compiles some es.next type //features to current versions of es. return 'function () { return a; }'; } function runAsStringA() { var a = 10; var compiled = eval(compile()); return compiled(); } 这不起作用,但匹配我想在理想世界中做的事情: function compile(fn) { return eval('function () { return a; }'); } function runAsStringA() { […]

Node.js用于评估和打印数据的TCP服务器

我尝试创build简单的TCP服务器,评估和打印结果,但它没有工作,这里是我的代码: var net = require('net'); var server = net.createServer(function(socket) { socket.on('data', function(data) { socket.write('result: '); socket.end(eval(data)); }); }); server.listen(8080); 当我连接到端口8080我得到这个: $ echo 10+10 | nc localhost 8080 result: 10+10 为什么eval不起作用?