2013-01-15 2 views
0

내 Node.js를 서버 코드의 조각을 검색 할 수 있습니다 : 기본적으로자바 스크립트 세 JSHint 오류를 제거하기 것은

// 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는 실제로 이것을 좋아하지 않습니다. 다음 세 가지 오류가 발생합니다.

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를 행복하게 만들려면 어떻게해야합니까? 코드에 다른 변경 사항이 있습니까?

+1

'label '이 할 수있는 전역 범위에 정의 된 함수 인 경우 window [label] (req, res); –

+0

downvoter의 의견을 부탁드립니다. – Randomblue

+0

'For의 본문은 if 문에 포장되어 필요없는 속성을 프로토 타입에서 제외해야합니다. '여기에서 label이 정말로 설정 한 속성이거나 그것이 상속 된 경우 API.hasOwnProperty (label)를 확인해야합니다. 프로토 타입 체인. –

답변

2

나는 jslint를 덜 엄격하게 만들고 (왜 그런지 이해한다면) 설정하는 것이 좋습니다. Jslint는 매우 엄격하기 때문에 엄격하지 않게하는 옵션이 있습니다. 중요한 점은 왜 신고했는지, 왜 이런 일을 허용하는지 확인하는 것입니다. 예를 들어

평가 후면 사용할 수 있도록 :

/*jslint evil: true */ 

일부 사용 :

/*jslint plusplus: true */ 

그들이 발견하면 그 ++와 - 버그 생성 또는 가독성과 그 원인 아무런 문제.

jslint는 잠재적 함정에주의를 기울이는 데 사용됩니다. 당신이 그들을 이해한다면, 당신은 그들을 둘러 볼 수 있습니다.

관련 문제