当我在中间件中重写url时,express将转到下一个第一个中间件,但是即使该中间件匹配模式路径也不会转到下一个中间件。下面的示例代码。当我浏览http://localhost:3000时,控制台日志消息
middleware1
middleware2
这样它就不会跳转到中间件3
let camera = GMSCameraPosition.camera(withLatitude: (((self.driverArrival.value(forKey: "latitude")) as AnyObject).doubleValue)!,
longitude: (((self.driverArrival.value(forKey: "longitude")) as AnyObject).doubleValue)!, zoom: 15)
let position = CLLocationCoordinate2DMake((((self.driverArrival.value(forKey: "latitude")) as AnyObject).doubleValue)!, (((self.driverArrival.value(forKey: "longitude")) as AnyObject).doubleValue)!)
driverMarker.position = position
driverMarker.map = self.mapView
但是当我浏览网址http://localhost:3000/nxt时,控制台日志消息
middleware2
middleware3
以便跳转到中间件3
或者如果我通过“ app.get”或“ app.all”更改“ app.use”,当我浏览网址http://localhost:3000
时,它仍会跳至中间件3请为我解释原因?那是个错误吗?谢谢!
答案 0 :(得分:0)
您可以简单地做--
<div id="homepage">
<img src="assets/img/home-logo.png" id="home-logo">
</div>
#home-logo{
display: block;
margin: 0 auto;
vertical-align: middle;}
#homepage{height: 100vh;
background-color:#fff}
它将打印。
app.get('/',function (req, res, next) {
console.log('middleware 1');
req.path = req.url = '/next';
next();
});
app.use('/next',function (req, res, next) {
console.log('middleware2');
next()
});
app.use('/next',function (req, res, next) {
console.log('middleware3');
next();
});
答案 1 :(得分:0)
您不应重写所有URL。 req.url
继承自Node的HTTP模块(check here),代表相对路径。
根据您的代码,一个解决方案可能是:
var express = require('express');
var app = express();
app.get('/', function (req, res, next) {
req.url = req.originalUrl + 'nxt';
console.log('middleware1');
next();
});
app.use('/nxt', function (req, res, next) {
console.log('middleware2');
next();
});
app.use('/nxt', function (req, res, next) {
console.log('middleware3');
next();
});
app.listen(3000);
请注意,因为它们具有相同的路径,所以可以这样链接它:
app.use('/nxt',function (req, res, next) {
console.log('middleware2');
next();
}, function (req, res, next) {
console.log('middleware3');
next();
});
还请注意,通常不会发生这种情况。我认为它应该向客户端(res.redirect(req.originalUrl + 'nxt')
)发送重定向响应,该响应将向/nxt
发出新请求。