什么是从快递/连接中间件“结束”请求的正确方法?
假设我有这样的中间件;
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(); } });
我需要在这里遵守什么样的规则?
- 我应该调用
res.end()
吗? (或res.redirect()
做到这一点?) - 我应该打电话给
next()
吗? (或者连接检测请求已经结束并且干净地退出?) - 假设我应该调用
next()
,我想这意味着我可能正在接收对我的中间件的请求,这可能已经被链中较高的其他中间件结束了; 我如何保护自己免受这个?
-
res.redirect()
确实调用res.end()
本身; - 如果你的中间件不是终点,你应该调用
next()
。 在生成redirect的情况下,它是一个端点,不应该调用next()
,但是如果req.host === host
,则需要调用next()
将请求上移到其他中间件/航线; - 一个请求不会结束,一个响应会。 而当它结束时,它将结束中间件链,所以你不必担心它。