form nodejs http сервер, в браузере мы получаем «домен» не отправлял никаких данных. ERR_EMPTY_RESPONSE - PullRequest
0 голосов
/ 07 августа 2020

ПРИМЕЧАНИЕ: эта проблема возникает на одной машине linux, и я тестировал ее на других linux машинах, там она работает нормально.

Я создал http-сервер, используя nodejs 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);

Это очень странное поведение, с которым я столкнулся, если я сделаю что-то асинхронное, не сработает.

Ответы [ 2 ]

0 голосов
/ 08 августа 2020

@ Thomas Morris ... спасибо за быстрый ответ.

Я отправляю этот ответ, чтобы, если кто-нибудь столкнется с этой проблемой, не потратит столько времени, сколько я.

Поскольку он не работал на одной машине, а работал на другой. Итак, я подумал о замене двоичного файла узла, и после того, как я это сделал, приведенный выше код начал работать. Сам бинарный файл узла был поврежден.

Я потратил около 4 дней, чтобы добраться до этого решения ... действительно странно :)

0 голосов
/ 07 августа 2020

Попробуйте использовать res.send not end, например:

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

Также я рекомендую использовать почтальон для отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...