表单nodejs http服务器,在浏览器中我们得到的“域”没有发送任何数据。 ERR_EMPTY_RESPONSE

时间:2020-08-07 09:31:41

标签: node.js http asynchronous

注意:此问题在一台linux机器上发生,我已经在其他linux机器上进行了测试,在这里工作正常。

我使用nodejs http软件包创建了http服务器,如下所示:

不起作用

const http = require('http');
const fs = require('fs');

const hostname = '0.0.0.0';
const port = 9001;

const printContent = function (content) {
    console.log('***** Content of File STARTS *****\n');
    console.log(content);
    console.log('\n*** Content of file: ENDS *****');
}

const server = http.createServer((req, res) => {
    setTimeout(function () {
        // printContent('html');
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/html');
        res.end('Hello');   
    }, 0);
    
    console.log('*** function ends ***');
        
});

// server.timeout = 5000;
server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

在这种情况下,响应以ERR_EMPTY_RESPONSE结尾

但是当我删除setTimeout时,它可以正常工作。 精细的作品:

     const server = http.createServer((req, res) => { 
        printContent('Hello');
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/html');
        res.end('Hello');   
    });
   server.listen(9001);

这是一个非常奇怪的行为,如果我使asyn做某事不起作用。

2 个答案:

答案 0 :(得分:0)

尝试使用res.send不会结束,例如:

res.status(200).send("Hello");

我还建议使用邮递员进行调试。

答案 1 :(得分:0)

@Thomas Morris ...感谢您的快速回复。

我发布此答案是为了使任何人如果遇到此问题都不会花费我太多的时间。

因为它不能在一台机器上工作而在另一台机器上工作。因此,我想到了替换节点二进制文件,并在完成此操作之后,上述代码开始工作。节点二进制文件本身已损坏。

我花了大约4天的时间才解决此问题...真的很奇怪:)