【问题标题】:Releasing resources after using app.get [duplicate]使用 app.get 后释放资源 [重复]
【发布时间】:2015-08-16 06:23:43
【问题描述】:

我正在使用 node.js 中的 express().get 在特定路径上提供 GET 请求。但是,在某些时候,我希望不再继续在该路径上提供 GET 请求。我该怎么做:

  1. 阻止服务器在该路径接受 GET 请求。
  2. 释放我积累的所有资源。

所以这是问题的简化版本。

var express = require("express");
var app = express();
var http = require("http").Server(app);

app.get("/", function(req, res) {
    // do some stuff
    // ...
    // check if we should stop serving requests here
    setInterval(function() {
        if (shouldBeClosed) {
            // what should be here?
        }
    }, 1000);
});

http.listen(8080, function() { });

【问题讨论】:

  • 这个答案在 Express 4.x 中似乎已经过时了。据我所知,没有 app.routes 对象,并且链接到的文档也没有提及它。大概是3.0.5版本吧。
  • 查看所有答案。 v4.9.5 已启用
  • 哦,我的错。这看起来像是要走的路。

标签: javascript node.js


【解决方案1】:

您可以简单地开始返回 404 或其他一些错误代码...

var stop = false;
app.get("/", function(req, res) {
    if (!stop) {
        // do some stuff
        // ...
        // check if we should stop serving requests here
        setInterval(function() {
            if (shouldBeClosed) {
                stop = true;
            }
        }, 1000);
    } else {
        res.status(404).send('nothing is here any more!');
    }
});

至于第二个问题:你是指什么样的资源?

【讨论】:

  • 我假设如果我做了这样的事情,服务器会以不同于从未存在的路径对待路径。我想它仍然存在于服务 GET 请求的路径的某些数据结构中。所以说我创建了大量的路径并通过这种方法删除它们,那么我想我会在这里发生内存泄漏。
  • 是的,你完全正确。这不会删除处理程序本身。但是,为什么您首先要添加大量路径?很难想象一个你真正需要这个的真实场景:大量不同的路径,具有完全不同的处理程序,必须是唯一的函数(所以你不能使用路径参数)......?
猜你喜欢
  • 2014-02-05
  • 2015-09-29
  • 1970-01-01
  • 2012-01-08
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
相关资源
最近更新 更多