Express.js 是一種在 Node.js 中建立 Web 應用程式的流行框架,但即使是經驗豐富的開發人員也會遇到難以調試的錯誤。本指南將涵蓋一些最常見的 Express.js 錯誤,解釋它們發生的原因,並提供實用的修復措施以使您的應用程式重回正軌。
當您嘗試為相同請求傳送多個回應時,通常會發生此錯誤。例如,您可能會不小心在路由處理程序中多次呼叫 res.send() 或 res.json()。
範例:
app.get('/example', (req, res) => { res.send('First response'); res.send('Second response'); // This will throw the error. });
修正:
確保每個請求僅發送一個回應。使用條件邏輯或返回語句來防止發送回應後進一步執行。
app.get('/example', (req, res) => { if (!req.query.param) { return res.status(400).send('Bad Request'); } res.send('Valid Request'); });
當中間件未正確連結或其中未呼叫 next() 時,就會發生這種情況。中介軟體必須明確地將控制權傳遞給下一個中介軟體或路由處理程序。
範例:
app.use((req, res) => { console.log('Middleware executed'); // Forgot to call next() }); app.get('/test', (req, res) => { res.send('Hello, World!'); });
修正:
除非中間件結束回應,否則呼叫 next()。
app.use((req, res, next) => { console.log('Middleware executed'); next(); // Pass control to the next middleware or route });
如果 req.body 未定義,很可能是因為您忘記使用 body 解析中間件,例如express.json() 或express.urlencoded()。
範例:
app.post('/submit', (req, res) => { console.log(req.body); // undefined });
修正:
在應用程式初始化中包含主體解析中間件。
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'); });
當沒有路由與傳入請求相符時,會發生此錯誤。預設情況下,Express 不提供 404 處理程序。
修正:
在路由定義末尾新增一個包羅萬象的中間件來處理 404 錯誤。
app.use((req, res) => { res.status(404).send('Page Not Found'); });
當另一個程序已經在使用您的應用程式嘗試綁定的連接埠時,就會發生這種情況。
Error: listen EADDRINUSE: address already in use :::3000
修正:
尋找並終止衝突進程或使用不同的連接埠。您也可以透過程式處理錯誤:
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.`); } });
Express.js 錯誤可能會令人沮喪,但了解其根本原因可以更輕鬆地解決它們。透過這些常見的修復,您將能夠更好地調試應用程式並保持專案順利運行。
如果您發現本指南有幫助,請點擊 ❤️ 圖示並關注我以獲取更多 JavaScript 提示和技巧!
以上是Express.js 的主要錯誤以及如何修復它們的詳細內容。更多資訊請關注PHP中文網其他相關文章!