Я пытаюсь установить http.request
в узел. Но мой тестовый сценарий просто не заканчивается.Почему http.request никогда не получает ответ?
- Что не так?
- Как отладить этот скрипт?
Thx!
const http = require('http');
const parse_url = require('url').parse;
const srv = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('okay');
});
srv.listen(0);
const addr = srv.address();
const url = `http://localhost:${addr.port}`;
const url_obj = parse_url(url);
const option = {
protocol: url_obj.protocol,
host: url_obj.host,
hostname: url_obj.hostname,
port: addr.port,
path: '/',
method: 'GET'
};
console.log(option);
const req = http.request(option, (res) => {
console.log('done');
srv.close();
});
// below is only for debugging
req.on('error', (e) => {
console.log(`problem with request: ${e.message}`);
});
req.on('socket', (socket) => {
console.log('socket event');
socket.on('data', function() {
console.log('data', arguments);
});
socket.on('lookup', function() {
console.log('lookup', arguments);
});
socket.on('end', function() {
console.log('end', arguments);
});
});
Вот консольный вывод:
$ node t.js
{ protocol: 'http:',
host: 'localhost:43347',
hostname: 'localhost',
port: 43347,
path: '/',
method: 'GET' }
socket event
lookup { '0': null, '1': '127.0.0.1', '2': 4, '3': 'localhost' }
И сценарий никогда не выйти. В идеале он должен выйти на srv.close()
Что такое запрос? Какие сообщения консоли выводят код? – JJJ
@Juhana 'req' - это запрос. – zjk
Нет, я имею в виду, какой запрос вы делаете на клиенте. Розетки не закрываются автоматически, если ни одна из сторон не закрывает их; вот и вся идея сокетов. – JJJ