问题
Imagine that I accept a piece of code from a user and want to just check whether the given string is a valid JS or not? Just from the syntax perspective.
function checkCode(x){
// Logic
}
// returns a boolean, whether 'x' is syntactically right or wrong.
I don't want solutions with eval
, since the whole nodejs process gets in to a syntax error when the given code, 'x' is syntactically wrong.
回答1:
Don't use eval
that is literally the same as handing over the control of your server to the public internet. Anyone can do anything with your server - delete files, leak files, send spam email and so on. I am shocked that the answer had received 3 upvotes by the time I noticed it.
Just use a Javascript parser like esprima http://esprima.org/
Here is a syntax validator example it can even collect multiple errors: https://github.com/ariya/esprima/blob/master/demo/validate.js#L21-L41
回答2:
To check a string contains syntactically valid JavaScript without executing it (which would be an incredibly bad idea), you don't need a library, you may use the parser you already have in your JS engine :
try {
new Function(yourString);
// yourString contains syntactically correct JavaScript
} catch(syntaxError) {
// There's an error, you can even display the error to the user
}
Of course this can be done server side.
Check this demonstration
回答3:
If it's gonna run in the user's browser then you could just eval it there without round-tripping through the server. try/catch
should catch the error. Doing it directly will also give feedback to the user quicker.
I already had some code lying around after an experiment. I modified it slightly and put it in a jsfiddle.
Basically just use try/catch:
try {
eval('Invalid source code');
} catch(e) {
alert('Error: '+e)
}
回答4:
Perhaps you can try JSLint.
https://github.com/douglascrockford/JSLint
It's a little bit heavy but it work well.
来源:https://stackoverflow.com/questions/20097761/in-node-js-how-do-you-check-whether-a-given-string-of-code-is-syntactically-cor