Cekap Mengurus Ralat dalam Next.js dengan Penyelesaian Pembangun Komprehensif

Susan Sarandon
Lepaskan: 2024-11-01 11:47:29
asal
740 orang telah melayarinya

Efficiently Manage Errors in Next.js with a Comprehensive Developer Solution

pengenalan

Saya teruja untuk memperkenalkan pakej ringan baharu yang bertujuan untuk memudahkan pengurusan ralat dalam aplikasi Next.js: nextjs-centralized-error-handler. Sebagai pembangun, kami sering menghadapi cabaran dengan pengendalian ralat, terutamanya dalam rangka kerja seperti Next.js, di mana kaedah tradisional boleh membawa kepada kod berulang dan senario yang diabaikan.

Mengambil inspirasi daripada pengalaman saya dengan rangka kerja Yii2—di mana kelas ralat terbina dalam memperkemas pengurusan ralat tanpa perlu mengekod kod status atau mesej tegar—saya menyedari keperluan yang sama dalam ekosistem Node.js. Kesedaran ini mendorong pembangunan kelas ralat tersuai dalam pakej ini, meningkatkan ketekalan dan kebolehgunaan.

Nota Penting: Pakej ini kini dalam versi beta. Sebagai alat yang baru dikeluarkan, maklum balas anda adalah penting untuk mengenal pasti isu yang berpotensi dan meningkatkan kestabilannya. Saya menggalakkan anda mencuba pakej nextjs-centralized-error-handler dan berkongsi pandangan anda, sama ada melalui laporan pepijat atau cadangan untuk penambahbaikan. Bersama-sama, kita boleh mengukuhkan pakej ini untuk komuniti Next.js.

Jadual Kandungan

  • Pengenalan
  • Mula Pantas
    • Pasang Pakej
    • Balut Pengendali Laluan API Anda
    • Sesuaikan Pengendalian Ralat (Pilihan)
  • Mengapa Gunakan nextjs-centralized-error-handler dengan Next.js Middleware?
  • Perbandingan dengan Next.js 13 Middleware
    • Contoh Perisian Tengah Next.js 13
    • Perbandingan dengan nextjs-centralized-error-handler
    • Memahami Skop dan Fleksibiliti: Next.js Middleware lwn. nextjs-centralized-error-handler
  • Contoh
    • Mengendalikan Kaedah HTTP Berbeza
    • Mengesahkan Parameter Permintaan
    • Mengendalikan Akses Tanpa Kebenaran
    • Menguatkuasakan Had Muatan
    • Menyesuaikan Respons Ralat (Lanjutan)
  • Integrasi dengan Perkhidmatan Pembalakan
  • Maklum Balas dan Kestabilan Komuniti
  • Manfaat Sekilas Pandang
  • Kesimpulan

Mula Pantas

  1. Pasang Pakej

    npm install nextjs-centralized-error-handler
    # or
    yarn add nextjs-centralized-error-handler
    
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
  2. Balut Pengendali Laluan API Anda

    // pages/api/example.js
    
    const { errorHandler, BadRequestError } = require('nextjs-centralized-error-handler');
    
    const handler = async (req, res) => {
      if (!req.body.name) {
        throw new BadRequestError('Name is required.');
      }
    
      res.status(200).json({ message: 'Success' });
    };
    
    export default errorHandler(handler);
    
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
  3. Sesuaikan Pengendalian Ralat (Pilihan)

    npm install nextjs-centralized-error-handler
    # or
    yarn add nextjs-centralized-error-handler
    
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk

Mengapa Menggunakan nextjs-centralized-error-handler dengan Next.js Middleware?

Perisian tengah Next.js 13 menawarkan keupayaan pemintasan global yang berkuasa, sesuai untuk tugas seperti pengesahan dan pengesahan permintaan umum. Walau bagaimanapun, nextjs-centralized-error-handler meningkatkan pengendalian ralat dengan menyediakan kawalan peringkat laluan yang terperinci dan respons terperinci yang tidak dilindungi oleh perisian tengah sahaja. Begini cara pakej ini melengkapkan dan memanjangkan perisian tengah Next.js:

  1. Pengurusan Ralat Khusus Laluan: Dengan nextjs-centralized-error-handler, setiap laluan boleh menentukan pengendalian ralat kontekstualnya sendiri, dengan mesej yang disesuaikan yang sepadan dengan fungsi laluan. Modulariti ini penting untuk aplikasi kompleks dengan pelbagai keperluan pengendalian ralat merentas titik akhir yang berbeza.

  2. Kelas Ralat Tersuai dengan Respons Terperinci: Pakej ini memperkenalkan kelas ralat tersuai (cth., BadRequestError, UnauthorizedError) dengan respons JSON yang mesra hadapan berstruktur. Respons ini diperkaya dengan metadata seperti kod status dan jenis ralat, memastikan pengendalian ralat yang boleh diramal dan diseragamkan untuk pasukan bahagian belakang dan bahagian hadapan.

  3. Keselamatan yang Dipertingkatkan dan Privasi Data: Hanya ralat yang merupakan kejadian CustomError yang disengajakan mempunyai kod status dan mesej yang dihantar kepada pelanggan. Untuk ralat yang tidak dijangka, mesej ralat generik digunakan dan butiran sensitif disimpan di sebelah pelayan, meminimumkan kebocoran maklumat.

  4. Pengelogan dan Penyepaduan dengan Alat Pemantauan: Menyokong penyepaduan dengan perkhidmatan pengelogan (cth., Sentry, Datadog), membolehkan pengesanan ralat terperinci dan penyahpepijatan melebihi apa yang boleh dicapai oleh perisian tengah sahaja.

  5. Pengendalian Ralat Boleh Disesuaikan dan Boleh Diperluas: Kelas CustomError boleh dikembangkan sepenuhnya, membenarkan pembangun mentakrifkan ralat khusus aplikasi, mencipta strategi pengendalian ralat yang fleksibel semasa aplikasi berkembang.

Dengan menggabungkan perisian tengah Next.js dengan nextjs-centralized-error-handler, anda mencapai penyelesaian pengendalian ralat yang teguh dan fleksibel yang menyokong keperluan global dan khusus laluan.


Perbandingan dengan Next.js 13 Middleware

Next.js 13 memperkenalkan perisian tengah global, membolehkan pemintasan peringkat permintaan untuk tugas seperti pengesahan dan pengesahan umum. Di bawah ialah perbandingan yang menunjukkan bagaimana Next.js 13 middleware berbeza daripada nextjs-centralized-error-handler dan masa untuk menggunakan setiap satu.

Seterusnya.js 13 Contoh Perisian Tengah

Next.js 13 middleware boleh ditakrifkan secara global dan digunakan merentasi semua laluan yang sepadan dengan corak tertentu. Ini berguna untuk operasi peringkat tinggi seperti pengelogan atau kebenaran.

npm install nextjs-centralized-error-handler
# or
yarn add nextjs-centralized-error-handler
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Perbandingan dengan nextjs-centralized-error-handler

Walaupun perisian tengah Next.js berguna untuk tugasan peringkat tinggi global, nextjs-centralized-error-handler mendayakan pengendalian ralat khusus laluan dengan kelas ralat tersuai untuk kawalan yang terperinci. Begini cara kedua-duanya berfungsi bersama:

Feature Next.js 13 Middleware nextjs-centralized-error-handler
Scope Global, based on route pattern matching Route-specific, applied individually to each handler
Use Case Authentication, global request validation Detailed error handling, custom error messages
Custom Error Responses Limited, generalized JSON responses Structured, frontend-compatible JSON responses
Custom Error Classes
Error Logging Integration ✅ (supports Sentry, Datadog, etc.)
Fine-Grained Control
Preventing Information Leakage Limited, as it handles errors globally without distinguishing between error types Enhanced, distinguishes between custom and unexpected errors to prevent sensitive data exposure
Integration with Route Handlers Middleware runs before route handlers, cannot modify responses within handlers Wraps individual route handlers, allowing for customized responses per route
Extensibility Limited to what middleware can handle globally Highly extensible through custom error classes and configurable options

Memahami Skop dan Fleksibiliti: Next.js Middleware lwn. nextjs-centralized-error-handler

Walaupun perisian tengah Next.js menyediakan mekanisme yang berkuasa untuk pemintasan permintaan peringkat tinggi, adalah penting untuk ambil perhatian bahawa perisian tengah beroperasi sebelum pelaksanaan pengendali laluan. Ini bermakna bahawa sebarang pengecualian yang dilemparkan ke dalam pengendali tidak akan ditangkap oleh perisian tengah; sebaliknya, ini akan membawa kepada Ralat Pelayan Dalaman 500 generik dikembalikan kepada pelanggan. Sebaliknya, nextjs-centralized-error-handler cemerlang dalam pengendalian ralat terperinci dalam laluan API individu. Bahagian ini menjelaskan peranan mereka yang berbeza dan menunjukkan cara ia boleh digunakan bersama dengan berkesan.

Senario: Pengesahan Input Pengguna

Bayangkan anda sedang membina laluan API yang memerlukan nama pengguna diberikan dalam badan permintaan. Jika nama itu tiada, anda mahu membalas dengan mesej ralat yang jelas dan khusus. Mari lihat cara setiap pendekatan mengendalikan senario ini.

Menggunakan Next.js Middleware

Dalam Next.js, middleware boleh digunakan untuk mengesahkan permintaan secara global. Walau bagaimanapun, ia tidak dapat menangkap pengecualian yang dilemparkan dalam pengendali laluan individu.

npm install nextjs-centralized-error-handler
# or
yarn add nextjs-centralized-error-handler
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
// pages/api/example.js

const { errorHandler, BadRequestError } = require('nextjs-centralized-error-handler');

const handler = async (req, res) => {
  if (!req.body.name) {
    throw new BadRequestError('Name is required.');
  }

  res.status(200).json({ message: 'Success' });
};

export default errorHandler(handler);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Apa Yang Berlaku Di Sini:

  1. Perisian tengah dijalankan sebelum pengendali laluan untuk memproses permintaan.
  2. Jika req.body.name tiada, Ralat akan dilemparkan.
  3. Walau bagaimanapun, perisian tengah tidak akan menangkap ralat ini, mengakibatkan Ralat Pelayan Dalaman 500 generik.

Menggunakan nextjs-centralized-error-handler

Sebaliknya, nextjs-centralized-error-handler menyediakan fungsi tertib lebih tinggi yang menangkap ralat yang dilemparkan dalam pengendali laluan.

const handler = async (req, res) => {
  // Your logic here
};

const options = {
  logger: customLoggerFunction,
  defaultMessage: 'Something went wrong!',
  formatError: (error, req) => ({
    message: error.message,
    type: error.name,
    timestamp: new Date().toISOString(),
  }),
};

export default errorHandler(handler, options);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Apa Yang Berlaku Di Sini:

  1. Penangan ralat membalut pengendali laluan, memintas sebarang ralat yang dilemparkan di dalamnya.
  2. Jika req.body.name tiada, BadRequestError dibuang dan ditangkap oleh errorHandler.
  3. Ini menghasilkan respons berstruktur dengan kod status yang sesuai (400) dan mesej ralat yang jelas ("Nama diperlukan.").

Mengapa Menggunakan Kedua-dua Pendekatan Bersama

Menggabungkan kedua-dua next.js middleware dan nextjs-centralized-error-handler menyediakan strategi pengendalian ralat yang komprehensif:

  • Pengesahan dan Pengesahan Permintaan Global: Gunakan perisian tengah Next.js untuk mengendalikan tugasan yang perlu digunakan merentas berbilang laluan, seperti pengesahan, kebenaran dan pengesahan permintaan umum.
  • Pengendalian Ralat Terperinci Khusus Laluan: Gunakan nextjs-centralized-error-handler untuk mengurus ralat yang berlaku dalam pengendali laluan individu, membenarkan respons ralat tersuai dan berstruktur yang disesuaikan dengan keperluan khusus setiap laluan.

Contoh: Menggunakan Kedua-dua Middleware dan nextjs-centralized-error-handler

Perisian Tengah (middleware.js):

npm install nextjs-centralized-error-handler
# or
yarn add nextjs-centralized-error-handler
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Pengendali Laluan (halaman/api/example.js):

// pages/api/example.js

const { errorHandler, BadRequestError } = require('nextjs-centralized-error-handler');

const handler = async (req, res) => {
  if (!req.body.name) {
    throw new BadRequestError('Name is required.');
  }

  res.status(200).json({ message: 'Success' });
};

export default errorHandler(handler);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Penjelasan:

  • Perisian Tengah (middleware.js): Mengendalikan tugas global seperti pengesahan. Terpakai pada semua laluan /api/* berdasarkan konfigurasi pemadan.
  • Pengendali Laluan (example.js): Mengendalikan logik khusus laluan. Menggunakan nextjs-centralized-error-handler untuk pengendalian ralat terperinci dan respons berstruktur.

Dengan menggunakan perisian tengah Next.js untuk semakan peringkat permintaan dan pengendali ralat-terpusat-seterusnya untuk pengendalian ralat peringkat tindak balas, anda mencapai pengesahan luas dan pengurusan ralat terperinci.


Kelebihan Utama nextjs-centralized-error-handler:

  • Pengendalian ralat terpusat melalui fungsi tertib lebih tinggi.
  • Kelas ralat tersuai untuk memudahkan dan menyeragamkan pengkategorian ralat.
  • Respons serasi hadapan, memudahkan bahagian hadapan berasaskan Next.js menghuraikan dan memaparkan mesej ralat dengan berkesan.

Pendekatan Tradisional lwn. nextjs-centralized-error-handler

Dalam aplikasi Node.js/Express tradisional, pengendalian ralat terpusat selalunya diuruskan melalui perisian tengah, yang memintas permintaan dan ralat secara konsisten merentas laluan. Walau bagaimanapun, dalam Next.js, laluan API tidak menyokong perisian tengah dengan cara yang sama, mewujudkan cabaran untuk pengendalian ralat terpusat. nextjs-centralized-error-handler mengisi jurang ini dengan menggunakan fungsi tertib lebih tinggi untuk menyediakan pengendalian ralat khusus laluan merentas semua laluan API.

Pendekatan Tradisional dalam Ekspres (Menggunakan Middleware)

Dalam Express, pengendalian ralat terpusat dicapai melalui fungsi middleware, yang membolehkan pengurusan ralat boleh guna semula merentas laluan:

const handler = async (req, res) => {
  // Your logic here
};

const options = {
  logger: customLoggerFunction,
  defaultMessage: 'Something went wrong!',
  formatError: (error, req) => ({
    message: error.message,
    type: error.name,
    timestamp: new Date().toISOString(),
  }),
};

export default errorHandler(handler, options);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dalam pendekatan ini, ralat dihantar ke seterusnya(ralat), yang kemudian mencetuskan perisian tengah pengendalian ralat terpusat untuk bertindak balas secara konsisten merentas laluan.

Menggunakan nextjs-centralized-error-handler dalam Next.js

Dengan nextjs-centralized-error-handler, anda mendapat gelagat seperti middleware yang disesuaikan untuk Next.js melalui fungsi tertib lebih tinggi (errorHandler) yang membungkus pengendali laluan, memintas dan mengurus ralat pada peringkat laluan:

npm install nextjs-centralized-error-handler
# or
yarn add nextjs-centralized-error-handler
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dengan nextjs-centralized-error-handler, anda mengelakkan kod pengendalian ralat berulang dalam setiap laluan. Sebaliknya, kelas ralat tersuai dan fungsi pesanan tinggi errorHandler memberikan respons ralat yang terpusat dan konsisten, memudahkan penyelenggaraan dan memperluaskan pengendalian ralat merentas keseluruhan aplikasi.


Ciri-ciri

1. Pengendalian Ralat Berpusat

  • Pengendalian Ralat Pesanan Tinggi: Pakej menggunakan fungsi tertib lebih tinggi, errorHandler, untuk memusatkan pengendalian ralat merentas semua laluan API. Daripada memerlukan sekatan cuba-tangkap berulang, errorHandler memintas ralat, memastikan struktur tindak balas berformat JSON yang konsisten untuk penyepaduan bahagian hadapan.

2. Kelas Ralat Tersuai Berstruktur

  • Kelas Ralat HTTP Boleh Disesuaikan: Pakej ini termasuk kelas yang dipratentukan seperti BadRequestError, UnauthorizedError dan NotFoundError, masing-masing dipetakan kepada kod status HTTP yang sesuai. Pendekatan ini meningkatkan kebolehbacaan kod dan mengurangkan redundansi, membenarkan pembangun mencipta jenis ralat tersuai tambahan dengan melanjutkan kelas CustomError asas.

3. Pensirian JSON dan Keserasian Frontend

  • Metadata Jenis Ralat: Respons ralat bersiri termasuk metadata seperti jenis ralat, membolehkan bahagian hadapan mengendalikan ralat tertentu secara konsisten. Ini meningkatkan pengalaman pengguna dengan menyampaikan maklum balas yang jelas dan boleh diambil tindakan, di samping memastikan butiran pelayan yang sensitif tidak didedahkan.

Latar belakang

Apakah Pengendalian Ralat?

Pengendalian ralat memastikan aplikasi boleh bertindak balas kepada keadaan yang tidak dijangka (cth., input tidak sah, kekurangan akses) dengan anggun. Daripada ranap, aplikasi dengan pengendalian ralat yang mantap akan memberikan maklum balas yang berguna kepada pengguna dan log ralat untuk penyahpepijatan.

Cabaran dalam Laluan API Next.js

Laluan API Next.js menyokong pendekatan perisian tengah global, tetapi laluan tersebut tidak menyokong pengendalian ralat terperinci yang khusus laluan seperti Express. Setiap pengendali laluan sebaliknya memerlukan pengurusan ralat individu, yang membawa kepada kod berlebihan dan tindak balas ralat yang tidak konsisten. nextjs-centralized-error-handler menangani perkara ini dengan menyediakan fungsi tertib lebih tinggi, errorHandler, yang membalut pengendali laluan untuk memastikan pengendalian ralat yang konsisten dan terpusat pada peringkat laluan.


Pemasangan

Menggunakan npm

npm install nextjs-centralized-error-handler
# or
yarn add nextjs-centralized-error-handler
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Menggunakan Benang

// pages/api/example.js

const { errorHandler, BadRequestError } = require('nextjs-centralized-error-handler');

const handler = async (req, res) => {
  if (!req.body.name) {
    throw new BadRequestError('Name is required.');
  }

  res.status(200).json({ message: 'Success' });
};

export default errorHandler(handler);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Penggunaan

Persediaan Asas

Import errorHandler dan kelas ralat tersuai ke dalam laluan API Next.js anda:

const handler = async (req, res) => {
  // Your logic here
};

const options = {
  logger: customLoggerFunction,
  defaultMessage: 'Something went wrong!',
  formatError: (error, req) => ({
    message: error.message,
    type: error.name,
    timestamp: new Date().toISOString(),
  }),
};

export default errorHandler(handler, options);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kelas Ralat Tersuai

Pakej termasuk beberapa kelas ralat yang dipratentukan:

  • BadRequestError (400)
  • Ralat Tanpa Kebenaran (401)
  • ForbiddenError (403)
  • NotFoundError (404)
  • MethodNotAllowedError (405)
  • InternalServerError (500)
  • PaymentRequiredError (402)
  • NotAcceptableError (406)
  • RequestTimeoutError (408)
  • PayloadTooLargeError (413)
  • TooManyRequestsError (429)
  • BadGatewayError (502)
  • ServiceUnavailableError (503)
  • GatewayTimeoutError (504)
  • InsufficientStorageError (507)
  • BandwidthLimitExceededError (509)
  • NetworkAuthenticationRequiredError (511)

Kelas ini memudahkan penciptaan ralat tanpa kod status pengekodan keras dalam setiap laluan:

// middleware.js (placed at the root of the app)

import { NextResponse } from 'next/server';

export function middleware(req) {
  // Example of request validation or general logging
  if (!req.headers.get('Authorization')) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
  }

  return NextResponse.next(); // Continue to the route handler
}

// Optional: Configure route matching
export const config = {
  matcher: '/api/:path*', // Applies middleware only to /api/* routes
};
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Contoh Penggunaan dengan Mesej Lalai

Jika anda hanya membuat seketika ralat tanpa menyatakan mesej, ia lalai kepada mesej yang telah ditetapkan dan mesra pengguna.

// middleware.js

import { NextResponse } from 'next/server';

export function middleware(req) {
  try {
    // You can include any logic here that might throw an error
    return NextResponse.next(); // Proceed to the route handler
  } catch (error) {
    // Handle the error and return an appropriate response
    return NextResponse.json({ error: 'An error occurred while processing your request.' }, { status: 500 });
  }
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Mencipta Ralat Tersuai

Untuk menangani keperluan khusus melangkaui kelas yang dipratentukan, pakej ini direka bentuk untuk dikembangkan, membolehkan anda membuat ralat tersuai unik untuk kes penggunaan lanjutan. Anda boleh melanjutkan kelas CustomError asas untuk menentukan jenis ralat anda sendiri, disesuaikan dengan logik perniagaan tertentu. Berikut ialah beberapa contoh ralat tersuai yang mungkin anda buat:

  • HTTPVersionNotSupportedError (505)
  • NotImplementedError (501)
  • VariantAlsoNegotiatesError (506)
  • ConflictError (409)
Contoh
// pages/api/example.js

const handler = async (req, res) => {
  if (!req.body.name) {
    throw new Error('Name is required.'); // This will not be caught by middleware
  }

  res.status(200).json({ message: `Hello, ${req.body.name}!` });
};

export default handler;
Salin selepas log masuk

Contoh ini mentakrifkan ConflictError tersuai (HTTP 409), yang boleh dilemparkan dalam kes apabila konflik sumber berlaku. Mencipta ralat tersuai membolehkan anda mengendalikan logik perniagaan yang unik atau keperluan khusus aplikasi dengan cekap.


Menggunakan nextjs-centralized-error-handler dengan App Router

Selain menyokong laluan API tradisional, nextjs-centralized-error-handler juga boleh digunakan dengan App Router yang diperkenalkan dalam Next.js 13. Begini cara untuk melaksanakan pengendalian ralat dalam App Router anda menggunakan pakej.

Contoh: Menggunakan nextjs-centralized-error-handler dengan App Router

Mencipta Laluan dengan Pengendalian Ralat

Anda boleh membuat laluan dalam Penghala Apl anda dan menggunakan pengendali ralat untuk mengurus ralat dengan berkesan.

npm install nextjs-centralized-error-handler
# or
yarn add nextjs-centralized-error-handler
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Penjelasan

  • Fungsi Pengendali: Fungsi pengendali memproses permintaan masuk. Ia menyemak parameter nama dan membuang BadRequestError jika ia tiada.
  • Pengendalian Ralat: Pengendali dibalut dengan errorHandler, yang menangkap sebarang ralat yang dilemparkan semasa pelaksanaan dan mengembalikan respons ralat berstruktur.

Pengendalian Ralat dalam Penghala Apl

Menggunakan Penghala Apl membolehkan cara yang bersih dan berstruktur untuk mengurus ralat sambil memanfaatkan keupayaan berkuasa nextjs-centralized-error-handler. Dengan menggabungkan kedua-duanya, anda memastikan aplikasi anda mengendalikan ralat dengan berkesan, tanpa mengira kaedah penghalaan yang digunakan.


Menyesuaikan Gelagat Pengendalian Ralat

Selain ralat tersuai, pakej ini membenarkan pembangun mengawal sepenuhnya kelakuan pengendalian ralat dengan:

  • Pengelogan Tersuai: Anda boleh palamkan sebarang fungsi pengelogan untuk mengesan ralat. Ini termasuk menyepadukan perkhidmatan luaran (cth., Sentry, LogRocket) atau pembalak tersuai.
  • Ralat Pemformatan Mesej: Gunakan formatError untuk menambah medan tersuai (cth., requestId, cap masa).
  • Status dan Mesej Lalai: Kawal lalai untuk ralat yang tidak dikendalikan, memastikan maklum balas mesra pengguna tanpa mendedahkan butiran pelayan.

Pilihan Pengendali Ralat

Anda boleh mengkonfigurasi errorHandler dengan pilihan untuk pengelogan tersuai, pemformatan ralat dan mesej lalai:

// pages/api/example.js

const { errorHandler, BadRequestError } = require('nextjs-centralized-error-handler');

const handler = async (req, res) => {
  if (!req.body.name) {
    throw new BadRequestError('Name is required.');
  }

  res.status(200).json({ message: 'Success' });
};

export default errorHandler(handler);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Contoh Tambahan untuk formatError

Fungsi formatError sangat fleksibel, membolehkan anda membuat respons ralat terperinci dan berstruktur yang sesuai dengan keperluan aplikasi anda. Di bawah ialah beberapa contoh konfigurasi yang mempamerkan kepelbagaian formatError:

Menambah Maklumat Pengguna dan Permintaan

const handler = async (req, res) => {
  // Your logic here
};

const options = {
  logger: customLoggerFunction,
  defaultMessage: 'Something went wrong!',
  formatError: (error, req) => ({
    message: error.message,
    type: error.name,
    timestamp: new Date().toISOString(),
  }),
};

export default errorHandler(handler, options);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Termasuk Jejak Tindanan Terperinci untuk Pembangunan

// middleware.js (placed at the root of the app)

import { NextResponse } from 'next/server';

export function middleware(req) {
  // Example of request validation or general logging
  if (!req.headers.get('Authorization')) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
  }

  return NextResponse.next(); // Continue to the route handler
}

// Optional: Configure route matching
export const config = {
  matcher: '/api/:path*', // Applies middleware only to /api/* routes
};
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Mengintegrasikan Metadata Aplikasi

// middleware.js

import { NextResponse } from 'next/server';

export function middleware(req) {
  try {
    // You can include any logic here that might throw an error
    return NextResponse.next(); // Proceed to the route handler
  } catch (error) {
    // Handle the error and return an appropriate response
    return NextResponse.json({ error: 'An error occurred while processing your request.' }, { status: 500 });
  }
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Menyesuaikan Respons Ralat

Fungsi formatError menyediakan fleksibiliti untuk menambah atau meninggalkan medan berdasarkan keperluan anda, menjadikannya mudah untuk menjana respons ralat yang berstruktur dan bermaklumat. Pilihan ini menjadikan pakej boleh disesuaikan dengan pelbagai aplikasi dengan menyediakan pembangun keupayaan untuk menyeragamkan pemesejan ralat dan kebolehkesanan merentas API mereka.


Pertimbangan Keselamatan

Pengendalian Pengecualian Komprehensif

Fungsi peringkat tinggi errorHandler membalut setiap pengendali laluan secara individu, menangkap semua pengecualian—kedua-duanya dijangka dan tidak dijangka—tanpa memerlukan sekatan cuba-tangkap berulang. Pendekatan ini memastikan bahawa ralat pihak ketiga atau ralat yang tidak dijangka pun dipintas, membolehkan respons ralat yang konsisten dan selamat merentas semua laluan.

Mencegah Kebocoran Maklumat

Untuk melindungi data sensitif, pakej kami membezakan antara ralat yang disengajakan, diketahui (cth., kejadian CustomError) dan ralat yang tidak dijangka:

  • Ralat Tersuai Sahaja: Hanya ralat yang dibuat sebagai contoh CustomError (atau subkelasnya) menyertakan Kod status dan mesejnya dalam respons klien, memberikan maklum balas ralat yang jelas dan mesra pengguna untuk isu yang diketahui.

  • Pengendalian Generik Ralat Tidak Dijangka: Untuk ralat yang bukan contoh CustomError—seperti isu perpustakaan pihak ketiga atau ralat pelayan yang tidak dijangka—errorHandler secara automatik menggunakan kod status 500 dan mesej generik ("Ralat pelayan dalaman berlaku"). Ini menghalang maklumat sensitif daripada terdedah kepada pelanggan secara tidak sengaja.

Pengelogan Boleh Disesuaikan untuk Keselamatan dan Pemantauan

Sambil memastikan respons kepada klien selamat dan umum, errorHandler juga menyokong pengelogan bahagian pelayan. Ini membolehkan ralat yang tidak dijangka dilog dan dipantau secara dalaman tanpa mendedahkan butiran kepada pelanggan, menggabungkan keselamatan dengan penjejakan ralat yang berkesan.

Contoh: Mengendalikan Ralat Tidak Dijangka Dengan Selamat

Pertimbangkan laluan API yang bergantung pada pustaka pihak ketiga, yang mungkin menimbulkan ralat yang tidak dapat kami ramalkan:

npm install nextjs-centralized-error-handler
# or
yarn add nextjs-centralized-error-handler
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Apa Yang Berlaku Di Bawah Tudung

Jika thirdPartyLibrary.doSomething() melemparkan ralat yang bukan CustomError, errorHandler akan:

  1. Tetapkan Kod status kepada 500 (atau KodStatus lalai yang dikonfigurasikan).
  2. Tetapkan mesej kepada "Ralat pelayan dalaman berlaku. Sila cuba sebentar lagi." (atau defaultMessage jika dikonfigurasikan).
  3. Cegah Kebocoran Maklumat: Memastikan tiada butiran sensitif (cth., mesej ralat asal atau surih tindanan) dihantar kepada klien.
  4. Log Bahagian Pelayan Ralat: Menggunakan logger yang disediakan untuk pemantauan dalaman untuk merekodkan ralat.

Nota mengenai Strategi Pengendalian Ralat

Fungsi errorHandler membezakan antara ralat tersuai dan ralat yang tidak dijangka:

  • Ralat Tersuai (Kejadian CustomError): Kod status dan mesej khusus yang anda tentukan dihantar kepada pelanggan, menawarkan maklum balas yang jelas dan mesra pengguna untuk isu yang diketahui.
  • Ralat Lain: Kod status lalai dan mesej digunakan untuk melindungi daripada kebocoran maklumat daripada ralat yang tidak dijangka.

Dengan menangkap semua ralat dengan cara ini, nextjs-centralized-error-handler menyediakan penyelesaian pengendalian ralat yang mantap, selamat dan bersatu yang disesuaikan untuk aplikasi Next.js, dengan perlindungan terbina dalam untuk mengelakkan pendedahan data yang tidak diingini.


Contoh

Di bawah ialah senario dunia sebenar yang menunjukkan cara nextjs-centralized-error-handler boleh memudahkan pengendalian ralat merentas pelbagai kes penggunaan.

Nota: Jika ralat berlaku tanpa mesej tertentu, mesej lalai yang mesra pengguna disediakan secara automatik.

1. Mengendalikan Kaedah HTTP Berbeza

Kes Penggunaan: Pastikan hanya kaedah HTTP tertentu (cth., POST) dibenarkan untuk laluan API dan berikan mesej ralat yang bermakna jika kaedah itu salah.

Dalam contoh ini, MethodNotAllowedError dilemparkan jika permintaan masuk menggunakan sebarang kaedah selain POST, memastikan maklum balas yang konsisten dan mesra pengguna. Jika tiada mesej tersuai diberikan, mesej lalai, "Kaedah tidak dibenarkan," akan digunakan.

npm install nextjs-centralized-error-handler
# or
yarn add nextjs-centralized-error-handler
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

2. Mengesahkan Parameter Permintaan

Kes Penggunaan: Semak kehadiran parameter yang diperlukan dalam permintaan dan balas dengan ralat berstruktur jika pengesahan gagal.

Di sini, BadRequestError dilemparkan apabila parameter (nama) yang diperlukan tiada. Jika tiada mesej tersuai dinyatakan, mesej lalai, "Nampaknya terdapat ralat dengan permintaan anda," digunakan.

// pages/api/example.js

const { errorHandler, BadRequestError } = require('nextjs-centralized-error-handler');

const handler = async (req, res) => {
  if (!req.body.name) {
    throw new BadRequestError('Name is required.');
  }

  res.status(200).json({ message: 'Success' });
};

export default errorHandler(handler);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

3. Mengendalikan Capaian Tanpa Kebenaran

Kes Penggunaan: Hadkan akses kepada pengguna yang dibenarkan sahaja. Jika pengguna tidak disahkan, balas dengan UnauthorizedError untuk menandakan akses yang tidak dibenarkan.

Dalam contoh ini, UnauthorizedError digunakan untuk memastikan hanya pengguna yang disahkan boleh mengakses laluan. Jika tiada mesej tersuai diberikan, ia lalai kepada "Akses tidak dibenarkan. Sila log masuk."

const handler = async (req, res) => {
  // Your logic here
};

const options = {
  logger: customLoggerFunction,
  defaultMessage: 'Something went wrong!',
  formatError: (error, req) => ({
    message: error.message,
    type: error.name,
    timestamp: new Date().toISOString(),
  }),
};

export default errorHandler(handler, options);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

4. Menguatkuasakan Had Muatan

Kes Penggunaan: Tolak permintaan yang mengandungi muatan melebihi saiz yang ditetapkan, membantu mengelakkan penyalahgunaan atau serangan penafian perkhidmatan.

Jika muatan melebihi had tertentu, PayloadTooLargeError dilemparkan untuk memaklumkan kepada pelanggan. Tanpa mesej tersuai, mesej lalai, "Minta entiti terlalu besar," akan dipaparkan.

// middleware.js (placed at the root of the app)

import { NextResponse } from 'next/server';

export function middleware(req) {
  // Example of request validation or general logging
  if (!req.headers.get('Authorization')) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
  }

  return NextResponse.next(); // Continue to the route handler
}

// Optional: Configure route matching
export const config = {
  matcher: '/api/:path*', // Applies middleware only to /api/* routes
};
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

5. Menyesuaikan Respons Ralat (Lanjutan)

Jika anda ingin memasukkan metadata tambahan atau menyesuaikan respons ralat, nextjs-centralized-error-handler membenarkan anda mentakrifkan fungsi formatError. Fungsi ini boleh disesuaikan untuk memasukkan medan tambahan, seperti laluan permintaan atau cap masa.

Untuk butiran penuh, lihat bahagian Menyesuaikan Kelakuan Pengendalian Ralat. Berikut ialah contoh ringkas:

// middleware.js

import { NextResponse } from 'next/server';

export function middleware(req) {
  try {
    // You can include any logic here that might throw an error
    return NextResponse.next(); // Proceed to the route handler
  } catch (error) {
    // Handle the error and return an appropriate response
    return NextResponse.json({ error: 'An error occurred while processing your request.' }, { status: 500 });
  }
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Penyepaduan dengan Perkhidmatan Pembalakan

Untuk meningkatkan kebolehmerhatian, nextjs-centralized-error-handler menyokong pengelogan tersuai melalui mana-mana perkhidmatan, seperti Sentry, Datadog atau penyelesaian pengelogan tersuai. Dengan menghantar fungsi pengelogan (seperti Sentry.captureException) kepada errorHandler, anda boleh memantau ralat dalam masa nyata sambil memastikan keselamatan dan kecekapan.

Apakah itu Logger Tersuai?

"Pelog tersuai" ialah sebarang fungsi pengelogan atau perkhidmatan luaran (seperti console.log, Sentry.captureException atau pelaksanaan tersuai) yang anda berikan kepada errorHandler untuk mengelog ralat di bahagian pelayan. Fungsi pengelogan ini bukan sebahagian daripada nextjs-centralized-error-handler itu sendiri, tetapi pakej ini direka untuk disepadukan dengan lancar dengan logger pilihan anda.

Amalan Terbaik untuk Pembalakan Selamat

  • Elakkan Mengelog Data Sensitif: Pastikan pengelog tersuai anda tidak secara tidak sengaja mencatatkan data pengguna sensitif, seperti bukti kelayakan atau butiran peribadi. Hadkan log kepada maklumat ralat penting sahaja untuk mengekalkan keselamatan dan pematuhan piawaian perlindungan data.

Pembalakan Dipertingkatkan dengan Sentry

Jika anda menggunakan Sentry, alat pemantauan yang popular, anda boleh menyepadukannya dengan pakej ini untuk penjejakan ralat pengeluaran:

Nota tentang Sentry: Sentry membantu pembangun menjejak, nyahpepijat dan menyelesaikan isu dalam masa nyata. Mengintegrasikan Sentry dengan nextjs-centralized-error-handler membolehkan anda mencatat ralat dalam pengeluaran, memberikan cerapan tentang tempat dan sebab kegagalan berlaku tanpa mendedahkan butiran sensitif.

Contoh di bawah menunjukkan cara menggunakan fungsi captureException Sentry sebagai pembalak dengan errorHandler.

npm install nextjs-centralized-error-handler
# or
yarn add nextjs-centralized-error-handler
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Persediaan ini menangkap ralat untuk pemantauan, sambil melindungi daripada mendedahkan maklumat sensitif kepada pelanggan. Dengan memanfaatkan pembalak tersuai, nextjs-centralized-error-handler menggabungkan keselamatan yang teguh dengan penjejakan ralat yang berkesan, memastikan persekitaran aplikasi yang selamat dan boleh diperhatikan.


Maklum Balas dan Kestabilan Komuniti

Memandangkan pakej ini baru dikeluarkan, saya sedar tentang kepentingan kestabilan dalam persekitaran pengeluaran. Walaupun saya telah menjalankan ujian, penggunaan dunia sebenar dan maklum balas daripada komuniti adalah penting untuk mengenal pasti sebarang isu yang berpotensi dan menambah baik pakej dengan lebih lanjut.

Saya menggalakkan pembangun untuk menyepadukan nextjs-centralized-error-handler ke dalam projek mereka dan berkongsi pengalaman mereka. Sama ada laporan pepijat, cadangan untuk penambahbaikan atau sekadar berkongsi cara ia membantu memperkemas pengurusan ralat dalam aplikasi anda, maklum balas anda amat berharga. Bersama-sama, kita boleh meningkatkan pakej ini dan menjadikannya lebih berkesan untuk komuniti Next.js.


Faedah Sepintas Lalu

  • Disesuaikan untuk Next.js: Mengendalikan pengehadan laluan API Next.js dengan pengendalian ralat terpusat.
  • Kelas Ralat Tersuai: Kelas pratakrif dan boleh diperluaskan untuk pengurusan ralat berstruktur.
  • Respons Berformat JSON: Mesej ralat serasi Frontend dan diperkayakan dengan metadata.
  • Pengelogan Boleh Disesuaikan: Penyepaduan dengan perkhidmatan pengelogan pihak ketiga untuk pemantauan ralat.
  • Penyatuan Lancar: Boleh disesuaikan dengan pantas kepada aplikasi Next.js sedia ada.

Kesimpulan:

Saya berharap nextjs-centralized-error-handler akan meningkatkan pengurusan ralat untuk pembangun Next.js, menawarkan pendekatan komprehensif dan mesra pengguna untuk mengendalikan ralat. Dengan memusatkan pengurusan ralat, memanfaatkan kelas ralat tersuai dan menyepadukan dengan lancar dengan perkhidmatan pengelogan, pakej ini menangani masalah kesakitan biasa dalam pembangunan aplikasi Next.js.

Saya menjemput komuniti dev.to untuk memberikan maklum balas dan menyumbang kepada projek, kerana pandangan anda amat berharga untuk memperhalusi pakej ini. Anda boleh menyemak pakej pada npm dan terokai repositori GitHub untuk mendapatkan butiran lanjut!

Teroka pakej dan menyumbang kepada pembangunannya:

  • Lihat pada npm
  • Lihat di GitHub

Input anda adalah penting untuk mengenal pasti isu dan meningkatkan kestabilan. Saya menggalakkan anda untuk bereksperimen dengan nextjs-centralized-error-handler dan berkongsi pengalaman anda. Bersama-sama, kita boleh memajukan pakej ini untuk komuniti Next.js.

Terima kasih atas sokongan anda dan saya teruja untuk mendengar pendapat dan pengalaman anda!

Atas ialah kandungan terperinci Cekap Mengurus Ralat dalam Next.js dengan Penyelesaian Pembangun Komprehensif. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan