如何在NodeJS套接字上调试无用的“解析错误”?

问题描述 投票:0回答:1

我正在使用NodeJS构建客户端和服务器,目前存在一些问题。这是我正在使用的代码。

客户

var options = {
    hostname: 'an IP',
    port: 8080,
    path: '/',
    rejectUnauthorized: false,
    method: 'GET'
};

var req = https.request(options, function(res) {
    res.on('data', function(data) {
        process.stdout.write(data);
    });
});
req.end();

服务器

var options = {
  key: fs.readFileSync('my private key.pem'),
  cert: fs.readFileSync('my certificate.pem'),
  isServer: true
};
tls.createServer(options, function (s) {
  s.write("Hello client!\n");
  s.pipe(s);
}).listen(8080, "an IP");

我得到的错误是:

events.js:174
      throw er; // Unhandled 'error' event
      ^

Error: Parse Error
    at TLSSocket.socketOnData (_http_client.js:442:20)
    at TLSSocket.emit (events.js:198:13)
    at addChunk (_stream_readable.js:288:12)
    at readableAddChunk (_stream_readable.js:269:11)
    at TLSSocket.Readable.push (_stream_readable.js:224:10)
    at TLSWrap.onStreamRead (internal/stream_base_commons.js:94:17)
Emitted 'error' event at:
    at TLSSocket.socketOnData (_http_client.js:448:9)
    at TLSSocket.emit (events.js:198:13)
    [... lines matching original stack trace ...]
    at TLSWrap.onStreamRead (internal/stream_base_commons.js:94:17)

现在,该错误实际上并没有给我太多尝试和调试代码的机会。我尝试重新启动终端,并确保没有其他进程在端口8080上侦听,但这仍未解决我的问题。我猜这可能与某种TLS握手问题有关,但我不确定。有谁对如何调试有任何想法?有什么立即弹出吗?

编辑:添加错误侦听器后,我得到:

{ Error: Parse Error
    at TLSSocket.socketOnData (_http_client.js:442:20)
    at TLSSocket.emit (events.js:198:13)
    at addChunk (_stream_readable.js:288:12)
    at readableAddChunk (_stream_readable.js:269:11)
    at TLSSocket.Readable.push (_stream_readable.js:224:10)
    at TLSWrap.onStreamRead (internal/stream_base_commons.js:94:17) bytesParsed: 5, code: 'HPE_INVALID_VERSION' }

在输出方面似乎没有太大变化,这很有帮助

javascript node.js
1个回答
0
投票

您正在获得那些隐秘的错误,因为您在流中缺少error侦听器。添加它们,您会得到一个更好的错误。

  • s.on('error', console.error)

  • req.on('error', console.error)

  • res.on('error', console.error)

请记住始终向所有流添加错误侦听器:)

© www.soinside.com 2019 - 2024. All rights reserved.