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中文网其他相关文章!