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

想象一下,我接受用户的一段代码,只想检查给定的string是否是有效的JS? 仅从语法angular度来看。

function checkCode(x){ // Logic } // returns a boolean, whether 'x' is syntactically right or wrong. 

我不想用eval解决scheme,因为当给定的代码“x”在语法上是错误的时候,整个nodejs进程陷入语法错误。

不要使用与将服务器的控制权移交给公共互联网相同的eval 。 任何人都可以对你的服务器做任何事情 – 删除文件,泄露文件,发送垃圾邮件等等。 当我注意到这个答案的时候,我感到很震惊。

只需使用像esprima一样的Javascriptparsing器http://esprima.org/

这里是一个语法validation器的例子,它甚至可以收集多个错误: https : //github.com/ariya/esprima/blob/master/demo/validate.js#L21-L41

要检查一个string包含语法上有效的JavaScript,而不执行它(这将是一个非常糟糕的主意),你不需要一个库,你可以使用你已经在你的JS引擎中的parsing器:

 try { new Function(yourString); // yourString contains syntactically correct JavaScript } catch(syntaxError) { // There's an error, you can even display the error to the user } 

当然这可以做到服务器端。

检查这个演示

如果它会在用户的浏览器中运行,那么您可以在那里进行评估,而不会在服务器上跳转。 try/catch应该赶上错误。 直接做,也会给用户更快的反馈。

实验后,我已经有了一些代码。 我稍微修改它,并把它放在一个jsfiddle 。

基本上只使用try / catch:

 try { eval('Invalid source code'); } catch(e) { alert('Error: '+e) } 

也许你可以试试JSLint。

https://github.com/douglascrockford/JSLint

这有点沉重,但它运作良好。