表示4路由优先

在expression4之前,你可以做类似的事情

app.get('/foo/bar', bar); app.get('/foo/*', foo); 

/foo/bar请求时使用bar中间件,而在请求/foo/baz时使用foo中间件。 然而,在express 4中, /foo/bar会调用bar中间件和foo中间件。 快递4有没有办法实现快递3的行为?

我能想到的一个方法是让我的第二个路由参数是/foo/(?!bar) ,但是这似乎有点疯狂。

听起来像你的目标是当/ foo / bar传递时调用bar(),否则调用foo()。 一种方法是使用/ foo /:值。 在fooHandler()中,检查是否req.params.value ==='bar',然后调用bar(),否则调用foo()。 这使得代码更清晰地阅读IMO。

 app.get('/foo/:value', fooHandler); : : function fooHandler(req, res) { if (req.params.value === 'bar') { this.bar(req, res); } else { this.foo(req, res); } } function bar(req, res) {/* do something */} function foo(req, res) {/* do something */}