首页 > 解决方案 > 为什么 Node 在使用主机名时期望 WebSocket,但在使用 IP 时正常响应?

问题描述

作为一点上下文:我一直在玩 Windows 终端,并设置配置文件、键绑定,并且在我的节点配置文件的情况下,设置启动时需要的脚本。这个获取required 的 js 脚本为我提供了一大堆实用程序,以使我在 REPL 中更快(将属性定义globalThis为 getter,例如clearpwd)。其中之一是inspect在我的终端中打开一个新窗格,并且应该开始检查原始节点 REPL。完美运行...直到我更改了 Node 将其检查器“服务器”绑定到的位置。

我还有一个我制作的工具,hostman它会写入我的主机文件,其目标是允许我将我的项目绑定到主机名,而不是127.{1-255}.{1-255}.{1-255}- 因为这正是主机名的用途(或多或少!)。我已经为我的 Node REPL: 做了这个nodejsterm -> 127.99.110.101

我将省略更粗略的细节,但只知道当我在 IP 上绑定和检查时,一切都按预期工作,但是当我在主机名上绑定和检查时,检查器永远不会连接。我深入研究了 node-inspect 的代码以查看发生了什么,并发现L254-L258 GET s ${host}/json。自然地,我把它扔进了 Edge 看看会出现什么。

$ curl http://127.99.110.101:26633/json
[ {
  "description": "node.js instance",
  "devtoolsFrontendUrl": "devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=127.99.110.101:26633/90b76604-50d8-45e5-bda4-3671750a9353",
  "devtoolsFrontendUrlCompat": "devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.99.110.101:26633/90b76604-50d8-45e5-bda4-3671750a9353",
  "faviconUrl": "https://nodejs.org/static/images/favicons/favicon.ico",
  "id": "90b76604-50d8-45e5-bda4-3671750a9353",
  "title": "NodeJS[2424]",
  "type": "node",
  "url": "file://",
  "webSocketDebuggerUrl": "ws://127.99.110.101:26633/90b76604-50d8-45e5-bda4-3671750a9353"
} ]

$ curl http://nodejsterm:26633/json
WebSockets request was expected

我知道一个简单的问题有很多文章,但是发生了什么,为什么会发生?

标签: javascriptnode.jshttpwebsocketnode-inspector

解决方案


推荐阅读