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

Coo*_*ies 1 javascript syntax eval node.js

想象一下,我接受用户的一段代码,想要检查给定的字符串是否是有效的JS?仅从语法角度来看.

function checkCode(x){
// Logic

}
// returns a boolean, whether 'x' is syntactically right or wrong.
Run Code Online (Sandbox Code Playgroud)

我不想要解决方案eval,因为当给定的代码'x'在语法错误时整个nodejs进程都会遇到语法错误.

Den*_*ret 9

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

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

当然这可以在服务器端完成.

检查此演示


Esa*_*ija 6

不要使用eval它与将服务器的控制权交给公共互联网完全相同.任何人都可以对您的服务器做任何事情 - 删除文件,泄漏文件,发送垃圾邮件等等.令我感到震惊的是,当我注意到它时,答案已收到3个赞成票.

只需使用像esprima这样的Javascript解析器http://esprima.org/

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