javascript - "end"来自 express/connect 中间件的请求的正确方法是什么?

标签 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() 吗? (或者 connect 是否检测到请求已经结束并干净退出?)
  3. 假设我应该调用next(),我猜这意味着可能会接收到我的中间件的请求,这些请求可能有已经被链中更高的其他中间件终止;我该如何保护自己免受这种伤害?

最佳答案

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

关于javascript - "end"来自 express/connect 中间件的请求的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15571779/

相关文章:

javascript - 类型错误 : Cannot read property 'id' of undefined in nodejs

javascript - 在 Nodejs Express 应用程序中单击按钮时启动/停止 cronjob

angularjs - 如何从 OAuth 开始使用 Angular 前端和 Node 后端以及 Git hub API 创建 Web 应用程序?

html - 如何使用node/express从现有的mongodb集合中读取数据并将其显示在浏览器上?

javascript - 自动页面刷新

javascript - 函数到 es6 类基样式

JavaScript 多菜单。如果我点击一个 ul,我希望另一个关闭。 (图格尔)。一直打不开,怎么解决?

javascript - 如何打印不包含导航选项卡内容、页脚和头部的 HTML/PHP 页面

javascript - 使用 Express 和表单输入提交在 Node.js 上执行查询

javascript - 为什么在expressjs中app.use中间件之后app.get中间件不起作用