NodeJS未使用的variables

我的棉绒抱怨reqnextvariables没有被使用。 我知道它的未成年人,但是解决这个问题的恰当方法是什么?

 /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', {title: 'JDA POC'}); }); 

我试图卸下reqnext ,但是这个爆炸了。 我试图改变reqnext的空,但有另一个错误。

有没有解决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的用例,请考虑重构参数的顺序,以便它们匹配使用优先级顺序。 我会给克罗克福德,这不是一个无用的做法(我知道,很重的套期保值!)。