SDK Node.js
This content is not available in your language yet.
Le SDK Pionne pour Node.js. Auto-capture les uncaughtException et unhandledRejection, enrichit chaque event avec le contexte runtime (Node version, OS, hostname, PID, mémoire).
Version actuelle : 0.1.0
Installation
Section intitulée « Installation »npm install @pionne/nodeQuickstart
Section intitulée « Quickstart »import { Pionne } from '@pionne/node';
Pionne.init({ token: 'pio_live_…', release: '1.0.0', environment: 'production',});const { Pionne } = require('@pionne/node');
Pionne.init({ token: 'pio_live_…', release: '1.0.0', environment: 'production',});Auto-capture
Section intitulée « Auto-capture »process.on('uncaughtException')— exceptions sync non capturéesprocess.on('unhandledRejection')— promises rejetées sans.catch()
Auto-context
Section intitulée « Auto-context »process.version— version Nodeos.platform(),os.release()— OS et releaseos.hostname()— nom de la machineprocess.pid— PIDprocess.memoryUsage()— RSS, heap used, heap total
Auto-breadcrumbs
Section intitulée « Auto-breadcrumbs »console.log/console.warn/console.error- Requêtes HTTP sortantes via
http/https(instrumentation derequest)
Pionne.init(options);Pionne.captureException(error, { tags, contexts });Pionne.captureMessage('Cache miss', { level: 'info' });Pionne.setUser({ id: 'user_42' });Pionne.setTags({ region: 'eu-west-1' });Pionne.setEnabled(false);Pionne.addBreadcrumb({ category: 'db', message: 'SELECT * FROM users' });Frameworks
Section intitulée « Frameworks »import express from 'express';import { Pionne } from '@pionne/node';
Pionne.init({ token: 'pio_live_…' });
const app = express();
// ... tes routes ...
// Le middleware d'erreur DOIT être enregistré en dernierapp.use(Pionne.expressErrorHandler());
app.listen(3000);import Fastify from 'fastify';import { Pionne } from '@pionne/node';
Pionne.init({ token: 'pio_live_…' });
const fastify = Fastify();
fastify.setErrorHandler((error, request, reply) => { Pionne.captureException(error, { contexts: { request: { url: request.url, method: request.method } }, }); reply.status(500).send({ error: 'Internal Server Error' });});
fastify.listen({ port: 3000 });import { NestFactory } from '@nestjs/core';import { Pionne } from '@pionne/node';import { AppModule } from './app.module';import { PionneExceptionFilter } from './pionne.filter';
Pionne.init({ token: 'pio_live_…' });
async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalFilters(new PionneExceptionFilter()); await app.listen(3000);}bootstrap();import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common';import { Pionne } from '@pionne/node';
@Catch()export class PionneExceptionFilter implements ExceptionFilter { catch(exception: unknown, host: ArgumentsHost) { Pionne.captureException(exception as Error); throw exception; // re-throw pour que Nest gère la réponse }}import { Pionne } from '@pionne/node';
Pionne.init({ token: 'pio_live_…' });
async function main() { try { await doSomething(); } catch (err) { Pionne.captureException(err as Error); }}
main();Background jobs
Section intitulée « Background jobs »Pour BullMQ, Bee-Queue, Agenda, Worker Threads ou tout job runner, wrap chaque handler dans un try/catch :
worker.on('failed', (job, err) => { Pionne.captureException(err, { tags: { job: job.name }, contexts: { job: { id: job.id, data: job.data } }, });});Performance monitoring
Section intitulée « Performance monitoring »Anti-token-theft
Section intitulée « Anti-token-theft »Le hostname (os.hostname()) est auto-pinné côté serveur au premier event. Si ton token fuite et qu’il est utilisé depuis un autre serveur, les events sont rejetés.
Voir aussi
Section intitulée « Voir aussi »- SDK Web — frontend browser
- API Ingest — protocole HTTP brut
- Source maps — symbolication