Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | // Send error to slack webhook, code adapted from express-error-slack https://github.com/chunkai1312/express-error-slack/blob/master/src/sendErrorToSlack.js import { SLACK_ERRORS_WEBHOOK_URL } from "../settings/serverSettings" import Slack = require("slack-node") import * as lodash from "lodash" const sendErrorToSlack = async (err: any) => { const slack = new Slack() slack.setWebhook(SLACK_ERRORS_WEBHOOK_URL) function createCodeBlock(title: string, code: any) { if (lodash.isEmpty(code)) return "" code = typeof code === "string" ? code.trim() : JSON.stringify(code, null, 2) const tripleBackticks = "```" return `_${title}_${tripleBackticks}${code}${tripleBackticks}\n` } const blocks = [{ title: "Stack", code: err.stack }] if (err.stderr) { blocks.push({ title: "stderr", code: err.stderr, }) } const attachment = { fallback: `${err.name}: ${err.message}`, color: err.status < 500 ? "warning" : "danger", // author_name: req.headers.host, title: `${err.name}: ${err.message}`, // fields: [ // { title: 'Request URL', value: req.url, short: true }, // { title: 'Request Method', value: req.method, short: true }, // { title: 'Status Code', value: err.status, short: true }, // { title: 'Remote Address', value: getRemoteAddress(req), short: true } // ], text: blocks .map((data) => createCodeBlock(data.title, data.code)) .join(""), mrkdwn_in: ["text"], footer: "sendErrorToSlack", ts: Math.floor(Date.now() / 1000), } slack.webhook({ attachments: [attachment] }, (error) => { if (error) console.error(error) }) } export const logErrorAndMaybeSendToSlack = async (err: any) => { console.error(err) if (SLACK_ERRORS_WEBHOOK_URL) sendErrorToSlack(err) } export const warn = (err: any) => console.warn(err) |