#github-actions
#github-действия
Вопрос:
У меня есть действие github, которое выглядит примерно так:
const http = require('http');
const core = require('@actions/core');
const options = {
hostname: 'mydomain.com',
port: 80,
path: '/webhook',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
}
};
const postData = {
foo: 'bar'
}
try {
const strPostData = querystring.stringify(postData);
options.headers['Content-Length'] = Buffer.byteLength(strPostData);
const req = http.request(options)
req.write(strPostData)
req.end()
} catch (error) {
core.info(error.message);
}
если mydomain.com/webhook
он отключен, моя работа завершается с ошибкой при этом действии, ведение журнала:
events.js:187
throw er; // Unhandled 'error' event
^
Error: connect ECONNREFUSED xxx.xxx.xxx.xxx:80
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1129:14)
Emitted 'error' event on ClientRequest instance at:
at Socket.socketErrorListener (_http_client.js:406:9)
at Socket.emit (events.js:210:5)
at emitErrorNT (internal/streams/destroy.js:92:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
at processTicksAndRejections (internal/process/task_queues.js:80:21) ***
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: 'xxx.xxx.xxx.xxx',
port: 80
***
Почему это не удается, почему это не try catch
улавливается?
Я не хочу, чтобы все задание завершилось неудачей, если это действие завершится неудачей, так как мне перехватить этот сбой и скрыть его от бегуна GitHub?
Комментарии:
1. Я считаю, что ошибка является асинхронной, вам нужно будет прослушать событие, например
'error'
, чтобы его перехватить. Также я заметил, что вы не ждете запроса на подключение перед отправкой данных, я не уверен, так ли вы это делаете.
Ответ №1:
Вам нужно будет прослушать 'error'
событие, чтобы перехватить это
const strPostData = querystring.stringify(postData);
options.headers['Content-Length'] = Buffer.byteLength(strPostData);
const req = http.request(options)
req.on('error', (err) => {/*Error Caught*/})
req.write(strPostData)
req.end()