내 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를 행복하게 만들려면 어떻게해야합니까? 코드에 다른 변경 사항이 있습니까?
'label '이 할 수있는 전역 범위에 정의 된 함수 인 경우 window [label] (req, res); –
downvoter의 의견을 부탁드립니다. – Randomblue
'For의 본문은 if 문에 포장되어 필요없는 속성을 프로토 타입에서 제외해야합니다. '여기에서 label이 정말로 설정 한 속성이거나 그것이 상속 된 경우 API.hasOwnProperty (label)를 확인해야합니다. 프로토 타입 체인. –