#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, это должно сработать и для вас. И если это не так, это означает только одно — проблема не в коде.