Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正确的方法是什么;完";来自express/connect中间件的请求?_Javascript_Node.js_Express_Connect - Fatal编程技术网

Javascript 正确的方法是什么;完";来自express/connect中间件的请求?

Javascript 正确的方法是什么;完";来自express/connect中间件的请求?,javascript,node.js,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(); } }); 我需要遵守什

假设我有这样的中间件

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()
    ;在生成重定向的情况下,它是一个端点,不应调用
    next()
    ,但如果
    req.host===host
    ,则需要调用
    next()
    ,将请求沿链向上移动到其他中间件/路由
  • 请求不会结束,响应会结束。当它这样做时,它将结束中间件链,因此您不必担心它

  • 需要注意的是,如果您还有其他处理要做,您仍然可以调用next,但是请注意,您已经发送了响应,因此响应对象已经完成,并且在很大程度上是响应后处理的变量。当您希望发送响应,然后执行其他较慢的操作(如与其他服务器通信以跟踪统计数据或发送电子邮件,或将内容推送到队列或与数据库通信等)时,这非常有用,因此真正结束express request/response链的是当您不再调用中间件时,它会被垃圾收集。