【问题标题】:How to fix (node:12388) [DEP0066] DeprecationWarning: OutgoingMessage.prototype._headers is deprecated in windows如何修复(节点:12388)[DEP0066] DeprecationWarning:OutgoingMessage.prototype._headers 在 Windows 中已弃用
【发布时间】:2025-12-28 14:25:16
【问题描述】:

我是节点新手。我已经安装了nosejs 版本v12.4.0、npm 6.9.0、http-server 0.11.1 和Visual Studio 代码。我想用我的http-server 打开我的hello word 项目,它是在 Visual Studio 代码中。但我收到以下错误

错误

[2019-06-21T05:20:18.280Z] "GET /" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge /18.17763" (node:11596) [DEP0066] DeprecationWarning: OutgoingMessage.prototype._headers 已弃用

我尝试 npm install node-gyp 来修复标头问题,但没有成功。

我也尝试使用不同的浏览器,例如。 chrome, firefox , 探索但没有成功。

    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body>
        <h1> Hello Word </h1>
    </body>
    </html>

我希望在任何浏览器中都能看到“Hello Word”。我使用的是 Windows 10。请协助

【问题讨论】:

    标签: node.js windows http-headers


    【解决方案1】:

    Node 版本 12 已弃用 OutgoingMessage.prototype._headers,用于 http-server。问题列于: https://github.com/http-party/http-server/issues/537

    https://nodejs.org/api/deprecations.html#deprecations_dep0066_outgoingmessage_prototype_headers_outgoingmessage_prototype_headernames

    使用节点 12.0.0 我在使用 http-server 时遇到了同样的错误。切换到 10.11.0 可以消除错误。

    【讨论】:

    • 供将来参考...根据链接,例如,使用 obj.getHeaders() 来获取 headers 对象,而不是使用 obj._headers。所以用函数“.getHeaders()”替换属性名“._headers”。使用任何一种方法的结果相同,但使用该函数是受支持的方法,并删除了弃用警告。
    • 在使用 Angular 微前端应用程序时,我收到了微应用程序没有在 master 中呈现。将节点 js 降级到 10.x 后,它正在工作。谢谢
    • 另外,适用于最新的 LTS v10 (lts/dubnium -> v10.22.0)
    【解决方案2】:

    那些在FreeCodeCamp 练习中遇到这个问题的人,问题在server.js 文件中。解决方案是将._headers 替换为.getHeaders(),因为错误告诉我们._headers 已被弃用。 例如在server.js 中,而不是 -

    // filter out CORS Headers
    var hs = Object.keys(res._headers)
      .filter(h => !h.match(/^access-control-\w+/));
    var hObj = {};
    hs.forEach(h => {hObj[h] = res._headers[h]});
    delete res._headers['strict-transport-security'];
    

    使用以下 -

    // filter out CORS Headers
    var hs = Object.keys(res.getHeaders())
      .filter(h => !h.match(/^access-control-\w+/));
    var hObj = {};
    hs.forEach(h => {hObj[h] = res.getHeaders()[h]});
    delete res.getHeaders()['strict-transport-security'];
    

    总结:用.getHeaders()替换所有._headers

    【讨论】:

    • 另外,将app.disable('x-powered-by') 添加到您的server.js 文件中,在var app = express() 之后,以立即或单次通过测试。
    【解决方案3】:

    我在浏览器同步方面遇到了一些问题。当我开始项目时,我每次都收到来自节点的警告([DEP0066] DeprecationWarning: OutgoingMessage.prototype._headers is deprecated)。但是,当我将浏览器同步依赖项更新为 "browser-sync": "^2.26.13" 时,我的项目开始时没有任何警告。

    【讨论】:

      【解决方案4】:

      对于那些每次开始他们的项目时都得到它的人, 运行:npm i browser-sync

      【讨论】: