Rumah >hujung hadapan web >tutorial js >Kesilapan Express.js Teratas dan Cara Membaikinya

Kesilapan Express.js Teratas dan Cara Membaikinya

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-27 18:40:14295semak imbas

Top Express.js Mistakes and How to Fix Them

Express.js ialah rangka kerja popular untuk membina aplikasi web dalam Node.js, tetapi pembangun berpengalaman pun menghadapi ralat yang sukar untuk dinyahpepijat. Panduan ini akan merangkumi beberapa ralat Express.js yang paling biasa, menerangkan sebab ia berlaku dan memberikan pembetulan praktikal untuk mengembalikan aplikasi anda ke landasan yang betul.

1. Ralat: Tidak Dapat Menetapkan Pengepala Selepas Ia Dihantar

Ralat ini biasanya berlaku apabila anda cuba menghantar berbilang respons untuk permintaan yang sama. Sebagai contoh, anda mungkin secara tidak sengaja memanggil res.send() atau res.json() lebih daripada sekali dalam pengendali laluan.

Contoh:

app.get('/example', (req, res) => {
    res.send('First response');
    res.send('Second response'); // This will throw the error.
});

Betulkan:
Pastikan anda hanya menghantar satu jawapan bagi setiap permintaan. Gunakan logik bersyarat atau penyataan pulangan untuk menghalang pelaksanaan selanjutnya selepas menghantar respons.

app.get('/example', (req, res) => {
    if (!req.query.param) {
        return res.status(400).send('Bad Request');
    }
    res.send('Valid Request');
});

2. Ralat: Middleware Tidak Melaksanakan

Ini berlaku apabila perisian tengah tidak dipautkan dengan betul atau next() tidak dipanggil di dalamnya. Fungsi middleware mesti secara eksplisit memberikan kawalan kepada middleware atau pengendali laluan seterusnya.

Contoh:

app.use((req, res) => {
    console.log('Middleware executed');
    // Forgot to call next()
});
app.get('/test', (req, res) => {
    res.send('Hello, World!');
});

Betulkan:
Panggil next() melainkan perisian tengah menamatkan respons.

app.use((req, res, next) => {
    console.log('Middleware executed');
    next(); // Pass control to the next middleware or route
});

3. Ralat: req.body Undefined

Jika req.body tidak ditentukan, kemungkinan besar anda terlupa menggunakan middleware parsing badan, seperti express.json() atau express.urlencoded().

Contoh:

app.post('/submit', (req, res) => {
    console.log(req.body); // undefined
});

Betulkan:

Sertakan middleware penghuraian badan dalam pemulaan apl anda.

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.post('/submit', (req, res) => {
    console.log(req.body); // Now it works
    res.send('Data received');
});

4. Ralat: Laluan Tidak Ditemui (404)

Ralat ini berlaku apabila tiada laluan yang sepadan dengan permintaan masuk. Secara lalai, Express tidak menyediakan pengendali 404.

Betulkan:

Tambahkan perisian tengah tangkap semua pada penghujung takrif laluan anda untuk mengendalikan ralat 404.

app.use((req, res) => {
    res.status(404).send('Page Not Found');
});

5. Ralat: EADDRINUSE (Port dalam Penggunaan)

Ini berlaku apabila proses lain sudah menggunakan port yang cuba diikat oleh apl anda.

Error: listen EADDRINUSE: address already in use :::3000

Betulkan:
Cari dan tamatkan proses bercanggah atau gunakan port lain. Anda juga boleh mengendalikan ralat secara pengaturcaraan:

const port = process.env.PORT || 3000;

app.listen(port, () => {
    console.log(`Server running on port ${port}`);
}).on('error', (err) => {
    if (err.code === 'EADDRINUSE') {
        console.error(`Port ${port} is already in use. Please use a different port.`);
    }
});

Ralat Express.js boleh mengecewakan, tetapi memahami puncanya menjadikannya lebih mudah untuk diselesaikan. Dengan pembetulan biasa ini, anda akan lebih bersedia untuk nyahpepijat aplikasi anda dan memastikan projek anda berjalan lancar.

Jika anda mendapati panduan ini membantu, tekan ikon ❤️ dan ikuti saya untuk mendapatkan lebih banyak petua dan helah JavaScript!

Atas ialah kandungan terperinci Kesilapan Express.js Teratas dan Cara Membaikinya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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