NodeJS未使用的variables
我的棉绒抱怨req
和next
variables没有被使用。 我知道它的未成年人,但是解决这个问题的恰当方法是什么?
/* GET home page. */ router.get('/', function(req, res, next) { res.render('index', {title: 'JDA POC'}); });
我试图卸下req
和next
,但是这个爆炸了。 我试图改变req
和next
的空,但有另一个错误。
有没有解决scheme,或者我应该忽略JSLint?
告诉JSLint禁止这个警告。 这是你可以做的最好的。
/*jslint unparam: true*/ router.get('/', function(req, res, next) { res.render('index', {title: 'JDA POC'}); }); /*jslint unparam: false*/
另一个解决scheme是将该variables命名为忽略 。
喜欢:
router.get('/', function(req, res, ignore) { res.render('index', {title: 'JDA POC'}); });
来自JSLint的帮助 :
JSLint引入了一个新的保留字:ignore。 它用在参数列表和catch子句中以指示将被忽略的参数。 这取代了旧的不参加选项。 未使用的警告将不会被忽略。
函数处理程序(忽略,值){
返回do_something_useful(value);
}
有很多方法可以解决这个问题,但最简单的方法就是使用你的“一个ignore
”,就像一条生命线。 JSLint最终放弃了这样一个事实:一些第三方库会给你发送比你需要的更多的参数,因为在这种情况下,我假设,并且没有办法清理。
目前的解决scheme
为了让读者更清楚地阅读代码,可以将一个参数标记为ignore
参数。 结合Kevin B的观察 ,你可以删除最后一个参数, next
,从这个函数,因为它也没有被使用,你可以使用这个代码来解决你的问题:
/*jslint white:true */ /*global router */ router.get('/', function(ignore, res) { "use strict"; res.render('index', {title: 'JDA POC'}); });
该代码适用于最新版本的JSLint 。 ignore
是JSLint中的一个约定 ,并以几种不同的方式使用。
只是要过分清楚,显然你不能说function(ignore, ignore, next)
,忽略两个参数,因为你在这一点上“重新定义ignore
”。 所以这个解决scheme非常有限,在某些情况下不起作用。
旧的解决scheme
不幸的是,这个代码并没有链接到旧版本的JSLint ,这是大多数人仍然使用的代码!
在那里,你坚持使用unparam声明,虽然我build议仍然清理next
并使用即将工作,很快ignore
约定。
/*jslint white:true */ /*global router */ /*jslint unparam:true */ router.get('/', function(ignore, res) { "use strict"; res.render('index', {title: 'JDA POC'}); }); /*jslint unparam:false */
疯狂的旧的解决scheme,比你想象的更常见
其他人已经疯狂地写疯狂的包装,所以这不是一个问题。 我讨厌这个,但是这是一个完整性的例子(我认为这种垃圾是为什么Crockfordjoin了ignore
参数):
/*jslint white:true, sloppy:true */ /*global router */ function convolutedRearrangementHack(res) { res.render('index', {title: 'JDA POC'}); } router.get('/', function(req, res, next) { convolutedRearrangementHack(res, req, next); });
我的意思是,那个皮鞋,但是太可怕了。 有时候,你可以通过创build你自己的包装在一个单一的全局命名空间中来成功地使用它,但是我不喜欢从我的第三方库中获得比我更远的包装。
对JSLint的批评; ^)
就个人而言,我不确定ignore
比使用函数签名期望的名称更清晰。 我承认这是一个JSLint规则,我不是100%相信是有用的替代品。 也就是说,大家都知道jqXHR.fail(function( jqXHR, textStatus, errorThrown ) {});
是,即使他们只想要errorThrown
,但只有了解JSLint内部工作原理的人才明白为什么你可能会ignore
你的参数列表。 我认为在与第三方库连接时使用着名的函数签名是有价值的。
似乎JSLint应该看到什么时候在一个声明的global
对象上调用一个函数,而不是抱怨,或者至less有一个选项可以说某些global
条目是你控制范围之外的对象。
post文稿build议
编辑:如果router.get
是在您的控制下的代码,并且只有使用req
的用例,请考虑重构参数的顺序,以便它们匹配使用优先级顺序。 我会给克罗克福德,这不是一个无用的做法(我知道,很重的套期保值!)。