在使用 Express.js 开发 web 应用时,难免会出现各种异常错误。这些错误可能来自于应用本身的代码,也可能来自于环境、依赖库、网络等因素。在这篇文章中,我们将探讨一些常见的异常错误及其解决方法,以帮助你更好地应对这些问题。
1. 错误处理中间件
在 Express.js 中,可以通过中间件处理异常错误。常见的错误处理中间件如下:
// javascriptcn.com 代码示例 // 处理 404 错误 app.use(function(req, res, next) { res.status(404).send("Sorry, can't find that!"); }); // 处理其他异常错误 app.use(function(err, req, res, next) { console.error(err.stack); res.status(500).send('Something broke!'); });
当应用出现 404 错误时,会返回 "Sorry, can't find that!",当出现其他异常错误时,则会返回 "Something broke!"。
2. 捕获异步错误
在 Express.js 应用中,可能会遇到异步错误,如下面的示例代码:
// javascriptcn.com 代码示例 app.get('/api/users/:id', function(req, res, next) { User.findById(req.params.id, function(err, user) { if (err) { next(err); } else { res.json(user); } }); });
在这个示例中,当 User.findById 函数执行出错时,会通过 next(err)
把异常错误传递到错误处理中间件。这种方式只适用于同步错误,对于异步错误,需要使用 try/catch 或 async/await 来捕获异常:
app.get('/api/users/:id', async function(req, res, next) { try { const user = await User.findById(req.params.id); res.json(user); } catch (err) { next(err); } });
通过使用 async/await,可以在捕获异步异常时使代码更加简洁易懂。
3. 优化错误日志
在开发环境中,可以通过引入 morgan 模块来记录请求日志。但是,对于错误日志,我们需要更加详细和准确的信息。可以使用 winston 模块来记录错误日志,并在部署环境中使用 pm2 管理进程:
// javascriptcn.com 代码示例 const winston = require('winston'); const logger = winston.createLogger({ level: 'error', format: winston.format.json(), defaultMeta: { service: 'user-service' }, transports: [ { filename: 'error.log', level: 'error', format: winston.format.combine( winston.format.timestamp(), winston.format.json() ) } ] }); app.use(function(err, req, res, next) { logger.error(err); res.status(500).send('Something broke!'); }); // 启动 pm2 进程 pm2 start app.js --name my-app
通过使用 winston,可以把错误日志记录到 error.log 文件中,并通过 pm2 管理进程来监控和重启应用。
4. 总结
在本文中,我们介绍了如何使用错误处理中间件、捕获异步错误和优化错误日志来解决 Express.js 应用中出现的异常错误。这些方法可以帮助我们更好地处理错误,提高应用的稳定性和性能。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653d7da87d4982a6eb74f009