26

假设我有这样的中间件;

var express = require('express');
var app = express();

app.use(function (req, res, next) {
    var host = "example.com";

    if (req.host !== host) {
        res.redirect(301, host + req.originalUrl);
        res.end();
    }
});

我需要在这里遵守什么样的规则?

  1. 我应该打电话res.end()吗?(或者res.redirect()为我做这个?)
  2. 我应该打电话next()吗?(或者连接是否检测到请求已经结束并干净地退出?)
  3. 假设我应该调用next(),我想这意味着可能会收到对我的中间件的请求,这些请求可能已经被链中更高的其他中间件结束了;我该如何保护自己免受这种伤害?
4

1 回答 1

34
  1. res.redirect()确实res.end()自称;
  2. next()如果你的中间件不是终点,你应该打电话;在生成重定向的情况下,它一个端点,next()不应该被调用,但是如果是req.host === host,您需要调用next()以将请求沿链向上移动到其他中间件/路由;
  3. 请求不会结束,响应会结束。当它发生时,它将结束中间件链,因此您不必担心。
于 2013-03-22T13:55:08.013 回答