Winston: 3.0.0 рдореЗрдВ рдореИрдВ JSON.stringify рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЙрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдлрд╝рд░ре░ 2018  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: winstonjs/winston

рдореИрдВ рд╕рдВрд╕реНрдХрд░рдг 3 рдкрд░ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдореИрдВрдиреЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд░рдирд╛ рд╣реИред
рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдФрд░ рднреА рдмрджрддрд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд▓реЙрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдореБрдЭреЗ error.message рдпрд╛ рд╕реАрдзреЗ рдХрдВрд╕реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╡рд┐рдХрд╛рд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдореЗрд░рд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:

`` рдХреЙрдиреНрд╕реНрдЯ {рдХреНрд░рд┐рдПрдЯрд▓реЙрдЧрд░, рдлреЙрд░реНрдореЗрдЯ, рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ} = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рд╡рд┐рдВрд╕реНрдЯрди');
рдХреЙрдиреНрд╕ {рдЧрдардмрдВрдзрди, рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк, рд▓реЗрдмрд▓, рдкреНрд░рд┐рдВрдЯрдл} = рдкреНрд░рд╛рд░реВрдк;

const environment = process.env.NODE_ENV;
const timestampFormat = 'YYYY-MM-DD HH:mm:SS';

const loggerFormat = printf((info) => {
    return `[${info.label}] ${info.message}`;
});
logger = createLogger({
    format: combine(
        label({ label: 'immoliste' }),
        format.colorize({ all: true }),
        format.splat(),
        format.simple(),
        loggerFormat
    ),
    transports: [
        new transports.Console({
            level: 'debug',
            colorized: true
        })
    ]
});

рдпрд╣ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

logger.error('Error sending contact message:', JSON.stringify(err));

рдореБрдЭреЗ рдХреЗрд╡рд▓ рдорд┐рд▓рд╛:

[mylabel] Error sending contact message:

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рд░ рдЪреАрдЬ рдХреЛ рд╕рдЦреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдзреЗ рдореЗрдВ рджрд░реНрдж рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдореИрдВ рдХреНрдпрд╛ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ?, рдХреНрдпреЛрдВрдХрд┐ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдпрд╣ рд╕реАрдзрд╛ рдерд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдпрд╣ рдПрдХ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рд╡рд┐рдВрд╕реНрдЯрди 2 рдХреЗ рд╕рд╛рде, рдореИрдВ рдмрд╕ рд╕рднреА console.X рдХреЛ winston.X рд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рдерд╛ред рдЕрдЪрд╛рдирдХ рдмрджрд╕реВрд░рдд рдкреНрд░рд╛рд░реВрдк рдЯреИрдЧ рдХреНрдпреЛрдВ?

рд╕рднреА 18 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

+1

@eyp рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ?

logger.error('Error sending contact message:%o', {foo: "bar"});

рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реНрд░реЛрдд рдпрд╣рд╛рдВ рд╣реИ:

https://github.com/winstonjs/logform/blob/master/splat.js

рдЬрд┐рд╕реЗ рдЖрдк рдиреЛрдб рд╕реЗ util.format рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ

https://nodejs.org/api/util.html#util_util_format_format_args

рддреЛ %o , %O рдФрд░ %j рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

%o

рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рд╡рд┐рдВрд╕реНрдЯрди рдиреЗ util.format рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдорд╛рди рд╕реНрд╡рд░реВрдкрдг рдкреИрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред

рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж!

рд╡рд┐рдВрд╕реНрдЯрди 3.1.0
рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдБ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдБ:
рдХреЙрдиреНрд╕реНрдЯ рдбреАрдмрдЧрдХрдВрд╕реЛрд▓ = рдирдпрд╛ рд╡рд┐рдВрд╕реНрдЯрди.рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯреНрд╕ред рдХрдВрд╕реЛрд▓ ({
рд╕реНрддрд░: 'рдбреАрдмрдЧ',
рдкреНрд░рд╛рд░реВрдк: рд╡рд┐рдВрд╕реНрдЯрди.format.combine (winston.format.simple ()),
рд╣реИрдВрдбрд▓ рдЕрдкрд╡рд╛рдж: рд╕рддреНрдп
})
рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ред рдЬреЛрдбрд╝реЗрдВ (рдбреАрдмрдЧ рдХрдВрд╕реЛрд▓)

рдХреЛрдб рдореЗрдВ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ: logger.debug('%o', req.query)
рдореБрдЭреЗ рдЬреЗрд╕рди рдСрдмреНрдЬреЗрдХреНрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрд╣рд▓реЗ "% o" рднреА рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдиреАрдЪреЗ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ:
рдбрд┐рдмрдЧ: %o {"рдСрдлрд╕реЗрдЯ":"73000",,"рдЧрд┐рдирддреА":"3",,"рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк":"2018-10-29 15:02:08"}
рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

рдЖрдо рддреМрд░ рдкрд░ %o рдХреЛ util.format() рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рд╡рд╣рд╛рдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ %o рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдмрд╕ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, logger.debug(req.query) рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ util.format рдХреЗ рд╕рд╛рде рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
const queryFormatted = util.format('%o', req.query)
logger.debug(queryFormatted)

@frenzymind рдпрд╛ рдЙрд╕ рдХрд╛рдо рдХреЛ рдЖрдЬрдорд╛рдПрдВ рдЬреЛ рдореВрд▓ рдореБрджреНрджреЗ рдкрд░ @mingchuno рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдмрд╕ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, logger.debug(req.query) рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

@eponymz рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ: рдбрд┐рдмрдЧ: [рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ] {"рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк": "2018-10-30 11:14:04"}

const queryFormatted = util.format('%o', req.query)

рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢реЛрд░ рд╣реИред

рдХреНрдпрд╛ рджреВрд╕рд░реЗ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рдереЗ? рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдЕрдЧрд░ рдЖрдк рд▓реЙрдЧ рдореЗрдВ рдХреНрд╡реЗрд░реА рдЪрд╛рд╣рддреЗ рдереЗ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЙрд╕ mingchuno рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рдпрд╛рд╕ рди рдХрд░реЗрдВред

рд╣рд╛рдВ, рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЬреЗрд╕рди рдСрдмреНрдЬреЗрдХреНрдЯ рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдорд┐рдВрдЧрдЪреБрдиреЛ рдиреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ% o рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдВрд╕реНрдЯрди "рд╣реБрдб рдХреЗ рдиреАрдЪреЗ" рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕реЗ рдЖрдЬрдорд╛рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ% o рднреА рдЫрдкрд╛ рд╣реБрдЖ рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рдбреАрдмрдЧ рд╕реНрддрд░ рдкрд░ splat() рдкреНрд░рд╛рд░реВрдк рднреА рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рдХреНрдпрд╛ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ?

рд╣рд╛рдВ, рдореБрдЭреЗ рд╡рд╕реНрддреБ рдирд┐рд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд▓рдВрдмрд┐рдд %o рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдмрдЧ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рдбрд┐рдЬрд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рд╣реИ? рдпрд╣ рдорд╛рдирдХ рд╕реЗ рдереЛрдбрд╝рд╛ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ (рдФрд░ рдореБрдЭреЗ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдШрдВрдЯрд╛ рд▓рдЧрд╛) рдХреЗ рдмрдЬрд╛рдп

console.log('Log me plz: ', {'ok': 'logged'});

(рд╡рд┐рдВрд╕реНрдЯрди 3.x) рд╕рднреА рд▓реЙрдЧрд┐рдВрдЧ рдХреЙрд▓реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП

logger.info('Log me plz: %o', {'ok':'logged'});

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рд╣реВрдБ? рдореИрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ...

рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдпрд╣ рдПрдХ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рд╡рд┐рдВрд╕реНрдЯрди 2 рдХреЗ рд╕рд╛рде, рдореИрдВ рдмрд╕ рд╕рднреА console.X рдХреЛ winston.X рд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рдерд╛ред рдЕрдЪрд╛рдирдХ рдмрджрд╕реВрд░рдд рдкреНрд░рд╛рд░реВрдк рдЯреИрдЧ рдХреНрдпреЛрдВ?

рддреЛ рдлрд┐рдХреНрд╕ %o рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ?

рд╣рд╛рдВ!

рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ рдХрд┐ рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛% o рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдпрд╛ рд╣реИ:

const prettyJson = format.printf(info => {
  if (info.message.constructor === Object) {
    info.message = JSON.stringify(info.message, null, 4)
  }
  return `${info.level}: ${info.message}`
})

const logger = createLogger({
  level: 'info',
  format: format.combine(
    format.colorize(),
    format.prettyPrint(),
    format.splat(),
    format.simple(),
    prettyJson,
  ),
  transports: [
    new transports.Console({})
  ],
})

рддреЛ рдпрд╣ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ ....

  logger.info({ hi: 123 })

...рдЗрд╕реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ

info: {
    "hi": 123
}

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ :D рдмрд╣реБрдд рд╣реА рднрдпрд╛рдирдХ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ "%o" рдХрд╛ рджреЛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛

рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ рдХрд┐ рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛% o рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдпрд╛ рд╣реИ:

const prettyJson = format.printf(info => {
  if (info.message.constructor === Object) {
    info.message = JSON.stringify(info.message, null, 4)
  }
  return `${info.level}: ${info.message}`
})

const logger = createLogger({
  level: 'info',
  format: format.combine(
    format.colorize(),
    format.prettyPrint(),
    format.splat(),
    format.simple(),
    prettyJson,
  ),
  transports: [
    new transports.Console({})
  ],
})

рддреЛ рдпрд╣ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ ....

  logger.info({ hi: 123 })

...рдЗрд╕реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ

info: {
    "hi": 123
}

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ :D рдмрд╣реБрдд рд╣реА рднрдпрд╛рдирдХ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ "%o" рдХрд╛ рджреЛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛

рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЬреАрдм рд╣реИ, рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕рднреА рд▓реЙрдЧрд░ рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ?

рдХреЗрд╡рд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ
```рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдЯрд╛рдЗрдкрдСрдлрд╝ info.message === 'рдСрдмреНрдЬреЗрдХреНрдЯ'
````
рдХреЗ рдмрдЬрд╛рдП

```рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ
info.message.constructor === рд╡рд╕реНрддреБ
````
рдЬрдм рд╕рдВрджреЗрд╢ рдЕрд╢рдХреНрдд рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдпрд╣ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ рдФрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
(рдЙрджрд╛: [{рд╣рд╛рдп: "456"}]

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕