从Express / connect中间件“结束”请求的正确方法是什么?

时间:2013-03-22 13:38:42

标签: javascript node.js express connect

假设我有这样的中间件;

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(),我想这意味着可能会接收到我的中间件的请求,这些请求可能已被其他人终止中间件链中更高;我如何保护自己不受此事影响?

1 个答案:

答案 0 :(得分:21)

  1. res.redirect()确实调用res.end()本身;
  2. 如果您的中间件不是终点,则应致电next();在生成重定向的情况下, 是一个端点,不应该调用next(),但如果req.host === host,则需要调用next()来移动链接到其他中间件/路由的请求;
  3. 请求没有结束,响应确实如此。当它发生时,它将结束中间件链,因此您不必担心它。