Express.js adalah kerangka kerja aplikasi web yang cepat dan fleksibel untuk Node.js. Ini adalah kerangka kerja yang sangat kuat dan fleksibel yang juga sangat mudah digunakan. Tetapi dengan fitur-fitur yang kuat seperti itu, muncul tantangan, terutama dalam kutukan setiap pengembang: debugging/penanganan kesalahan. Pengalaman pengguna yang lancar tidak hanya melibatkan debugging yang efektif tetapi juga penanganan kesalahan yang baik. Artikel ini membahas praktik terbaik debugging dan penanganan kesalahan di Express.js.
Penjelasan Debugging Ekspres js
Debugging adalah proses menemukan dan menyelesaikan bug atau masalah dalam aplikasi Anda. Dalam Express. js debugging dapat disederhanakan dengan cara mengimplementasikan:
sumber: betterprogramming.pub |
1. Menggunakan Modul Debug
Express.js Untuk menggunakannya, cukup instal modul:
npm install debug
Anda kemudian dapat mengonfigurasi debug untuk setiap bagian dari aplikasi Anda dengan menentukan ruang nama:
const debug = require('debug')('app');
debug('This is a debug message');
Untuk mengizinkan daftar debug, sesuaikan ruang nama saat memulai aplikasi Anda dengan mengatur variabel lingkungan DEBUG:
DEBUG=app node app.js
2. Pencatatan Konsol
Menggunakan console. log() atau console. Menempatkan pernyataan error() adalah metode debugging yang cepat dan kotor, tetapi efektif. Meskipun metode ini bekerja dengan baik selama pengembangan, lebih baik menggunakan pustaka logging terstruktur seperti Winston atau Bunyan untuk logging produksi.
3. Inspektur Node.js
Node. Express juga dapat di-debug menggunakan inspektur bawaan yang disertakan dengan aplikasi node.js. Sekarang, jalankan aplikasi Anda dengan flag --inspect:
node --inspect app.js
4. Debugging Middleware
Penanganan Kesalahan di Express.js
1. Middleware penanganan kesalahan terpusat
app.use((err, req, res, next) => {console.error(err.stack);res.status(err.status || 500).json({error: {message: err.message || 'Internal Server Error',},});});
2. Membedakan Antara Kesalahan Klien dan Server
- 400: Permintaan Buruk
- 401: Tidak sah
- 403: Dilarang
- 404: Tidak Ditemukan
- 500: Kesalahan Server Internal
app.get('/some-route', (req, res, next) => {const error = new Error('Not Found');error.status = 404;next(error);});
3. Menangani Pengecualian yang Tidak Tertangkap
process.on('uncaughtException', (err) => {console.error('Uncaught Exception:', err);process.exit(1); // Exit the process after handling});
process.on('unhandledRejection', (reason, promise) => {console.error('Unhandled Rejection:', reason);});
4. Menggunakan Pustaka Pihak Ketiga
npm install express-async-errors
5. Mencatat Kesalahan
const winston = require('winston');const logger = winston.createLogger({level: 'error',transports: [new winston.transports.Console(),new winston.transports.File({ filename: 'error.log' }),],});app.use((err, req, res, next) => {logger.error(err.message);res.status(500).send('Something went wrong!');});