0
請找我的node.js服務器代碼片段如下:的JavaScript:擺脫3個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)原型鏈。 –