当我在中间件中更改url时,即使该中间件匹配模式路径,它也不会跳到下一个中​​间件

时间:2018-10-10 04:05:22

标签: node.js express

当我在中间件中重写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

请为我解释原因?那是个错误吗?谢谢!

2 个答案:

答案 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发出新请求。