Почему Http-запрос никогда не заканчивается

#node.js #httprequest

#node.js #httprequest

Вопрос:

Я выполняю http-запрос в nodejs, но запрос никогда не заканчивается и продолжаю выполнять следующий код. он выводит только «конец ответа», но никогда «конец запроса». Почему он будет вести себя так?

 const post_data = JSON.stringify({
    'username': username,
    'org': orgName,
    'peers': peers,
    'channelName': channelName,
    'chaincodeName': chaincodeName,
    'fcn': fcn,
    'args': args
});

var post_options = {
    host: 'localhost',
    port: '3000',
    path: '/cc/write',
    method: 'POST',
    headers: {
         "content-type": "application/json",
         "Content-Length": Buffer.byteLength(post_data)
    }
};

var post_req = http.request(post_options, function (res) {
    console.log("connected");
    res.on('data', function (chunk) {
        console.log('Response: '   chunk);
        ccResponse = chunk;
    });
    res.on('end', function () {
        console.log('response end')
    });
});

// post the data
post_req.write(post_data);
post_req.on('end', function () {
    console.log('request end');
});
post_req.on('finish', function () {
    console.log('request end');
});
post_req.end();

console.log("Random thing");
  

Комментарии:

1. Что вы ожидаете, что произойдет? Событие «end» HTTP-ответа является окончанием вашего взаимодействия Клиент -> сервер. Не существует такого понятия, как «завершение» HTTP-запроса само по себе.

Ответ №1:

Прямо над последней строкой есть дополнительная скобка console.log("Random thing"); После удаления этой скобки код создал этот журнал:

 Random thing
request end
connected
Response: {"error":"Not Found"}
response end
  

Как вы можете видеть, в журнале есть «конец запроса».
Он был запущен с node v11.13.0.

Пожалуйста, дайте мне знать, если это не поможет.

Фактический код, который я использовал:

 const http = require('http');

const post_data = JSON.stringify({
    'username': 'username',
    'org': 'orgName',
    'peers': 'peers',
    'channelName': 'channelName',
    'chaincodeName': 'chaincodeName',
    'fcn': 'fcn',
    'args': 'args'
});

var post_options = {
    host: 'localhost',
    port: '3000',
    path: '/cc/write',
    method: 'POST',
    headers: {
         "content-type": "application/json",
         "Content-Length": Buffer.byteLength(post_data)
    }
};

var post_req = http.request(post_options, function (res) {
    console.log("connected");
    res.on('data', function (chunk) {
        console.log('Response: '   chunk);
        ccResponse = chunk;
    });
    res.on('end', function () {
        console.log('response end')
    });
});

// post the data
post_req.write(post_data);
post_req.on('end', function () {
    console.log('request end');
});
post_req.on('finish', function () {
    console.log('request end');
});
post_req.end();

console.log("Random thing");  

Комментарии:

1. На самом деле это моя опечатка здесь, поскольку я изначально помещаю весь http-запрос в «if», и я не удалял его при публикации кода. Извините, что ввел вас в заблуждение.

2. @lmc1913 вы пытались поместить код из этого фрагмента в новый проект? Возможно, что-то не так с node или даже с другим кодом, который вы еще не показали. Если это работает для меня на узле 11.13.0, это должно сработать и для вас. И если это не так, это означает только одно — проблема не в коде.