Laluan API Jenis-selamat di Next.js dengan Zod
ZOD boleh melaksanakan penghalaan API jenis selamat di Next.Js. Pertama, tentukan skema permintaan dan tindak balas, kemudian sahkan dan suntikan jenis melalui fungsi pesanan yang lebih tinggi, dan akhirnya menggunakan enkapsulasi ini dalam penghalaan untuk memastikan input dan output disahkan. Skema juga boleh digunakan semula untuk menjana jenis front-end untuk memastikan konsistensi. 1. Tentukan badan permintaan pengesahan skema, parameter pertanyaan dan struktur tindak balas; 2. Buat fungsi WithValidation untuk menghuraikan dan menaip permintaan secara automatik; 3. Memohon fungsi ini dalam penghalaan API untuk mencapai keselamatan jenis penuh; 4. Secara pilihan mengesahkan badan tindak balas dan merangkum fungsi alat; 5. Front-end secara langsung mengimport jenis yang dihasilkan oleh ZOD untuk memastikan bahawa jenis depan dan belakang adalah konsisten, dengan itu meningkatkan pengalaman pembangunan dan kualiti projek.
Next.js membuat bangunan aplikasi lengkap mudah, tetapi secara lalai, penghalaan API adalah lemah-jenis-anda boleh membuat kesilapan dalam permintaan parsing badan, parameter pertanyaan, atau format tindak balas. Digabungkan dengan ZOD, anda boleh melaksanakan penghalaan API yang selamat jenis, dengan pemeriksaan masa kompilasi dan arahan automatik dari permintaan kepada respons.

Berikut adalah cara praktikal untuk melaksanakan penghalaan API selamat jenis menggunakan ZOD di Next.Js.
✅ Skema yang mentakrifkan permintaan dan tindak balas
Inti ZOD adalah untuk menentukan struktur data yang dapat disahkan. Untuk penghalaan API, biasanya kita perlu mengesahkan:

- Parameter pertanyaan (
query
) - Permintaan badan (
body
) -
response
// lib/skema/user userchema.ts import {z} dari 'zod'; Export const createUsersChema = z.Object ({ badan: z.object ({ Nama: z.string (). min (1), E -mel: z.string (). e -mel (), }), pertanyaan: z.object ({ Apikey: z.string (). min (1), }). Pilihan (), }); jenis eksport createUserInput = z.Infer <typeof createUserschema>;
Skema ini mentakrifkan struktur yang diperlukan oleh pos /api/users
.
? ️ Buat pemproses API jenis selamat
Kami merangkumi fungsi pesanan yang lebih tinggi, secara automatik Parses dan taip req.body
dan req.query
.

// lib/api/handler.ts import {nextapirequest, nextapiresponse} dari 'seterusnya'; import {zodschema, zoderror} dari 'zod'; Taipkan pengendali <t> = ( req: nextapirequest & {body: t ['body']; pertanyaan: t ['query']}, Res: NextApireSponse ) => Janji <void> | tidak sah; Fungsi eksport dengan nilai <t meluas {body?: Any; pertanyaan?: mana -mana}> (( Skema: Zodschema <T>, Pengendali: Pengendali <T> ) { kembali async (req: nextapirequest, res: nextapiresponse) => { Cuba { const data = schema.parse ({ badan: req.method! == 'get'? req.body: undefined, pertanyaan: req.query, }); Pengendali kembali (req sebagai mana -mana, res); } menangkap (ralat) { jika (kesilapan contoh zodError) { kembali res.status (400) .json ({ Ralat: 'Pengesahan gagal', Butiran: error.errors, }); } kembali res.status (500) .json ({error: 'ralat pelayan dalaman'}); } }; }
Fungsi withValidation
ini akan:
- Sahkan input
- "Suntikan"
body
dan jenisquery
yang betul di peringkat jenis - Menangkap ralat zod dan pulangan 400
? Penggunaan Sebenar: Routing API Jenis-selamat
// Pages/API/Users.ts import {nextapirequest, nextapiresponse} dari 'seterusnya'; import {withValidation} dari '@/lib/api/pengendali'; import {createUserschema} dari '@/lib/skema/user userschema'; Eksport Lalai WithValidation ( createuserschema, Fungsi Async CreateUser ( Req: NextApireQuest & {body: {name: string; E -mel: String}}, Res: NextApireSponse ) { const {name, e -mel} = req.body; // Di sini Jenis Keselamatan: Nama dan E -mel telah dijamin menjadi rentetan oleh Zod // boleh dimasukkan dengan selamat ke dalam pangkalan data ... Return Res.Status (201) .json ({ ID: '123', nama, e -mel, }); } );
Sekarang:
- Sekiranya front-end melewati
name: null
, ia akan ditolak oleh zod - Dalam kod vs,
req.body.
akan mempunyai penyelesaian automatik yang lengkap - Sebarang akses ke
req.body.phone
akan melaporkan ralat (kecuali skema ditakrifkan)
? Pilihan: Pengesahan tindak balas format tindak balas bersatu
Melangkah lebih jauh, anda juga boleh mengesahkan output untuk mengelakkan pulangan medan sensitif yang tidak dijangka:
const createresponseschema = z.Object ({ id: z.string (), Nama: Z.String (), E -mel: z.string (), }); // const result = {id: '123', nama, e -mel}; const parsed = createresponseschema.parse (hasil); // pastikan struktur output adalah betul pulangan res.status (201) .json (parsed);
Anda juga boleh merangkumi fungsi alat validResponse(schema, data)
.
? Petua: Gunakan semula jenis front-end
Skema ZOD boleh menjana jenis jenis, jadi bahagian depan boleh mengimport secara langsung:
// Komponen frontend jenis import {createuserinput} dari '@/lib/skema/user userschema'; Const Data: CreateUserInput ['body'] = { Nama: 'Alice', E -mel: 'alice@example.com', }; // Jenisnya sama persis, dan anda tidak perlu bimbang tentang bidang perubahan backend
Pada dasarnya itu sahaja. Dengan sedikit enkapsulasi ZOD, routing API Next.js boleh diperolehi:
- Pengesahan Parameter Badan/Pertanyaan Permintaan Automatik
- Keselamatan Jenis Pautan Penuh
- Pengalaman pembangunan yang lebih baik (penyelesaian automatik, pelaporan ralat awal)
- Kurangkan kesilapan runtime
Tidak rumit, tetapi ia dapat meningkatkan kualiti projek.
Atas ialah kandungan terperinci Laluan API Jenis-selamat di Next.js dengan Zod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Server-siderendering (ssr) innext.jsgenerateshtmlontheserverforachrequest, InfrovingPormanceAndSeo.1.ssrisidealfordynamiccontentthatchangesfrequents, suchasuserdashboard

Kaedah teras untuk merealisasikan pengantarabangsaan Next.JSappRouter adalah untuk menggabungkan perpustakaan INTL seterusnya untuk pengurusan pelbagai bahasa. Pertama, konfigurasikan sokongan routing i18n di Next.config.js, tentukan lokal, defaultlocale dan localedetection; 2. Selepas memasang INTL seterusnya, buat direktori mesej untuk menyimpan fail JSON setiap bahasa, dan secara automatik memproses awalan bahasa routing melalui middleware.js; 3. Sahkan lokasi dalam apl/susun atur.tsx dan memuatkan mesej bahasa yang sepadan, gunakan NextIntlClient

ZOD boleh melaksanakan penghalaan API jenis selamat di Next.Js. Pertama, tentukan skema permintaan dan tindak balas, kemudian sahkan dan suntikan jenis melalui fungsi pesanan yang lebih tinggi, dan akhirnya menggunakan enkapsulasi ini dalam penghalaan untuk memastikan input dan output disahkan. Skema juga boleh digunakan semula untuk menjana jenis front-end untuk memastikan konsistensi. 1. Tentukan badan permintaan pengesahan skema, parameter pertanyaan dan struktur tindak balas; 2. Buat fungsi WithValidation untuk menghuraikan dan menaip permintaan secara automatik; 3. Memohon fungsi ini dalam penghalaan API untuk mencapai keselamatan jenis penuh; 4. Secara pilihan mengesahkan badan tindak balas dan merangkum fungsi alat; 5. Front-end secara langsung mengimport jenis yang dihasilkan oleh ZOD untuk memastikan bahawa jenis depan dan back-end konsisten, dengan itu meningkatkan pembukaan

Perbezaan teras antara Remix dan Next.js terletak pada pemprosesan data: Remix menggunakan loader dan tindakan untuk melaksanakan tindak balas permintaan bersatu pada pelayan, secara asli menyokong penyerahan dan pengalihan bentuk secara asli, dan mengurangkan permintaan dan kesilapan klien; Seterusnya.js bergantung pada GetServersideprops atau routing API untuk bekerjasama dengan pengambilan depan, dan aliran data jelas tetapi mudah untuk menyebabkan ketidakkonsistenan penghidratan. 2. Dari segi penghalaan, kedua -dua menggunakan fail, iaitu, laluan, tetapi penghalaan bersarang Remix lebih semula jadi. Subroutines mewarisi susun atur dan membuat melalui UseOutlet, yang sesuai untuk pertengahan dan backend kompleks; Approuter Next.js menyokong Nesting dan ReactServercomponents, tetapi mempunyai struktur yang agak baik.

Sveltekit didasarkan pada rangka kerja kompilasi Svelte, tanpa DOM maya, dengan runtime yang lebih ringan dan prestasi yang lebih tinggi, terutamanya sesuai untuk senario sensitif prestasi; 2.Next.js didasarkan pada React, dengan ekosistem yang besar dan lengkung pembelajaran yang lancar, sesuai untuk kerjasama pasukan dan perkembangan pesat; 3.Sveltekit melakukan lebih baik dalam saiz pakej, pemuatan skrin pertama dan pengoptimuman penghidratan, dan menyokong seni bina pulau; 4.Next.js lebih matang dalam projek peringkat perusahaan, integrasi kompleks dan sokongan penggunaan; 5. Jika anda meneruskan sintaks prestasi dan ringkas, pilih Sveltekit. Jika anda menghargai ekologi dan kerjasama, pilih Next.js, pilih berdasarkan keperluan projek dan timbunan teknologi pasukan.

NextAuth.js adalah Perpustakaan Pengesahan Next.js, yang menyokong OAuth, kata laluan e -mel, JWT, dan lain -lain; 2. Selepas pemasangan, konfigurasikan pembekal dan kunci dalam halaman/api/auth/[... NextAuth] .js; 3. Gunakan sessionprovider untuk membungkus permohonan dan gunakan penggunaan, menandatangani, menandatangani untuk menguruskan status; 4. Gunakan getession atau getServersession untuk melindungi halaman dan laluan API; 5. Anda boleh menambah pembekal kelayakan untuk merealisasikan log masuk kata laluan peti mel dan bekerjasama dengan dasar JWT; 6. Anda boleh menyesuaikan halaman log masuk dan mengembangkan maklumat pengguna melalui panggilan balik; Nexta

Todebuganext.jsapplicationinvscode, createeAlaunch.jsonfileinthe.vscodefolderwithaconfigurationthatlaunchesthenext.jsde vserverusingthenodetypeandsetsTheProgramto $ {WorkspaceFolder}/node_modules/next/dist/bin/nextwithargs ["dev", "-port = 300

Pasang Next-Auth dan Buat API Routing File App/API/Auth/[... NextAuth] /Route.js untuk mengkonfigurasi Google Login and Secret; 2. Tetapkan Google_Client_ID, Google_Client_Secret dan NextAuth_Secret dalam .env.local; 3. Gunakan kaedah signin dan signout untuk menambah butang log masuk dan log keluar, dan bungkus aplikasi dengan sessionprovider; 4. Melindungi satu halaman melalui getServersession atau gunakan middleware withAuth untuk melindungi laluan tertentu; 5. Pelanjutan pilihan SE
