#javascript #node.js
#javascript #node.js
Вопрос:
Я пытаюсь использовать slack devkit, расположенный здесь (https://slack.dev/node-slack-sdk/webhook ) для отправки строк по разным каналам slack. Я просто пытаюсь включить обработку ошибок try / catch для отправки в статический канал в случае сбоя переменной webhook.
Я перепробовал все различные варианты try / catch, но я не могу заставить какой-либо код catch работать должным образом. Логика try работает нормально и, как и ожидалось. Я новичок в javascript / nodejs, так что, вероятно, это глупая ошибка с моей стороны. Я определил как SLACK_WEBHOOK_URL, так и SLACK_MONITORING_URL вне этого фрагмента
const TOTAL_GHE_ISSUES = "10" //pulled from DB
const GHE_ISSUE_NUMBERS = "90" //pulled from DB
const IncomingWebhook = require('@slack/webhook').IncomingWebhook; //function grabbed from slack webhook devkit library
var url = SLACK_WEBHOOK_URL //can change this to however we want to grab team's webhook
var webhook = new IncomingWebhook(url)
//timer
// Send the notification, if no webhook is present in owners table, skips
if (url != ""){
if (TOTAL_GHE_ISSUES != "0"){
try {
webhook.send({
text: "*Daily Overdue Nessus Vulnerability Alert*",
attachments: [{color: "#FF0000", blocks: [{type: "section",text: {type: "mrkdwn",text: "@here *" TOTAL_GHE_ISSUES "* Overdue Nessus Vulnerability issues reported nOverdue Nessus Vulnerability GHE Issue Numbers: *" GHE_ISSUE_NUMBERS "*"}}]}]
})
}
catch(err){
console.log("Webhook Verification Failed")
//url = SLACK_MONITORING_URL;
//webhook = new IncomingWebhook(url)
//webhook.send({
//text: "*Nessus Webhook Verification, please investigate broken webhooks:*",
//attachments: [{color: "#FF0000", blocks: [{type: "section",text: {type: "mrkdwn",text: SLACK_WEBHOOK_URL}}]}]
//})
}
}
else {
try {
webhook.send({
text: "*Daily Overdue Nessus Vulnerability Alert*",
attachments: [{color: "#36a64f", blocks: [{type: "section",text: {type: "mrkdwn",text: "@here *NO* Overdue Nessus Vulnerabilities reported"}}]}]
})
}
catch(err){
//url = SLACK_MONITORING_URL
//webhook = new IncomingWebhook(url)
//webhook.send({
//text: "*Nessus Webhook Verification, please investigate broken webhooks:*",
//attachments: [{color: "#FF0000", blocks: [{type: "section",text: {type: "mrkdwn",text: SLACK_WEBHOOK_URL}}]}]
//})
}
}
}
else {
console.log("No webhook provided")}
Я бы ожидал, что первый перехват (ошибка) будет отправлен в console.log (и в конечном итоге добавит больше функциональности, но я просто хочу этот базовый тестовый пример), но вместо этого я получаю эту ошибку
at Object.requestErrorWithOriginal (/Users/BrandonKonieczny/Documents/GitHub/node-slack-sdk/node_modules/@slack/webhook/dist/errors.js:25:33)
at IncomingWebhook.send (/Users/BrandonKonieczny/Documents/GitHub/node-slack-sdk/node_modules/@slack/webhook/dist/IncomingWebhook.js:54:32)
at processTicksAndRejections (internal/process/next_tick.js:81:5)
(node:65139) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:65139) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Ответ №1:
В предложении try webhook.отправка возвращает обещание, а не ошибку. То, что возвращает ошибку, является результатом самого обещания, поэтому оно не будет зафиксировано в операторе catch.
Чтобы исправить это, вы могли бы создать функцию async / await и выполнить…
async () => {
try {
await webhook.send({
text: "*Daily Overdue Nessus Vulnerability Alert*",
attachments: [{color: "#FF0000", blocks: [{type: "section",text: {type: "mrkdwn",text: "@here *" TOTAL_GHE_ISSUES "* Overdue Nessus Vulnerability issues reported nOverdue Nessus Vulnerability GHE Issue Numbers: *" GHE_ISSUE_NUMBERS "*"}}]}]
})
}
catch(err){
console.log("Webhook Verification Failed")
//url = SLACK_MONITORING_URL;
//webhook = new IncomingWebhook(url)
//webhook.send({
//text: "*Nessus Webhook Verification, please investigate broken webhooks:*",
//attachments: [{color: "#FF0000", blocks: [{type: "section",text: {type: "mrkdwn",text: SLACK_WEBHOOK_URL}}]}]
//})
}
}
Комментарии:
1. Я попытался интегрировать приведенный выше код как есть, и я не получаю никакого видимого результата, независимо от того, выполняется ли попытка или случай catch. Он больше не отправляется на канал slack и не возвращает мне что-либо в командной строке при сбое
2. Код там представляет функцию (вы должны ее запустить), поэтому вы можете объявить константу const a = async () …. а затем выполнить a()
3. Теперь у меня все работает, спасибо за помощь и ваше терпение!