0

以下に私のNode.JSサーバーコードのスニペットを見つけてください。

// Define the user API
var API = {
    list: 'private',
    login: 'public',
    logout: 'private',
    add: 'admin',
    remove: 'admin',
    edit: 'admin'
};

// Attach API handlers
for(var label in API) {
    var denied = 'Permission denied';

    var wrapper = (function (label) {
        return function (req, res) {
            var permission = API[label];

            if(!req.session) {
                if(permission !== 'public') {
                    res.send(denied);
                    return;
                }
            } else if((permission === 'admin') && (req.session.rights !== 'Administrator')) {
                res.send(denied);
                return;
            }

            eval(label + '(req, res)');
        };
    }(label));

    server.post('/user/' + label, wrapper);
}

基本的に、の各プロパティにAPIハンドラーがあり、API必要に応じてアクセス許可を処理して、プログラムでハンドラーをアタッチします。しかし、JSHintはこれを本当に好きではありません。3つのエラーが発生します:

Line 29: eval(label + '(req, res)');
eval is evil.

Line 31: }(label));
Don't make functions within a loop.

Line 12: for(var label in API) {
The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.

JSHintを幸せにするために、このコードをどのように改善できますか?コードに提案する他の変更はありますか?

4

1 に答える 1

2

jslintの厳密さを緩和するオプションを確認し、これらを設定することをお勧めします(理由を理解している場合)。Jslintは非常に厳格であるため、厳格さを緩和するオプションがあります。重要なことは、なぜそれらにフラグが立てられたのか、そしてなぜこれらのことを許可しても大丈夫なのかを知っているということです。

たとえば、evalの使用を許可するには:

/*jslint evil: true */

いくつかの使用法:

/*jslint plusplus: true */

彼らは++と-がバグの作成や読みやすさに問題を引き起こさないことを発見したので。

jslintは、潜在的な落とし穴に注意を向けるために使用されます。それらを理解すれば、それらを回避することができます。

于 2013-01-15T17:02:18.203 に答える