node.js - 从快递服务传递错误消息
问题描述
在我的节点应用程序中,我有以下代码。
import gravatar from 'gravatar';
import bcrypt from 'bcryptjs';
import config from 'config';
import jwt from 'jsonwebtoken';
import { User } from '../models/user';
class AuthService {
/** Register user */
async registerUser(userDto) {
const { firstName, lastName, email, password } = userDto;
let user = await User.findOne({ email });
if (user) throw new Error('Email already exists');
const avatar = this.createAvatar(email);
user = new User({ firstName, lastName, email, password, avatar });
user.password = await this.hashPassword(user.password);
await user.save();
const token = this.generateAuthToken(user);
return { user, token }
}
当有重复的电子邮件时,邮递员会给出正确的错误消息,但它是这样的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Error: Email already exists
<br> at AuthService._callee$ (/home/shashika/PROJECTS/developer-connector/server/services/authService.js:14:21)
<br> at tryCatch (/home/shashika/PROJECTS/developer-connector/server/node_modules/regenerator-runtime/runtime.js:65:40)
<br> at Generator.invoke [as _invoke] (/home/shashika/PROJECTS/developer-connector/server/node_modules/regenerator-runtime/runtime.js:303:22)
<br> at Generator.prototype.<computed> [as next] (/home/shashika/PROJECTS/developer-connector/server/node_modules/regenerator-runtime/runtime.js:117:21)
<br> at step (/home/shashika/PROJECTS/developer-connector/server/services/authService.js:30:191)
<br> at /home/shashika/PROJECTS/developer-connector/server/services/authService.js:30:361
<br> at processTicksAndRejections (internal/process/task_queues.js:89:5)
</pre>
</body>
</html>
我只想要错误消息。但是为什么这会给我这个 html 代码呢?
解决方案
您可以创建用于错误处理的全局中间件。这只是它如何工作的示例代码。只需将此中间件作为最后一个中间件放在您的 index.js(app.js?)中。
错误中间件.js
export default (err, req, res, next) => {
console.log('Server err', err.message);
return res.status(err.status || 500).json({
error: err.message
});
};
应用程序.js
import errors from './middleware/errorMiddleware';
...
// your middlewares
...
app.use(errors);
这只是基本示例,您可以按照自己的方式对其进行自定义(仅在开发环境中发送 err.message,或者根据错误类型或状态等处理错误)。使用 try/catch 并使用 express next() 方法处理错误也是一个好方法。
推荐阅读
- php - 如何在 android studio (java) 中读取 PHP 异常?
- vue.js - 在 vuetify v-text-field 道具中使用 HTML
- qr-code - 可以从 QR 扫描输出中删除多余的字符吗
- web2py - 在域托管上安装 web2py
- android - 如何使用不同的语言环境作为语言的默认语言环境?
- inheritance - 我可以在这种情况下使用继承吗?如果可以,哪种策略最好?(TPH 对比 TPT 对比 TPC)
- .htaccess - 我应该在哪个文件夹中存储 CSS 文件?
- python - 在列表中搜索单词的智能方法
- c++ - 如何避免由于内存不足而导致 gcc 崩溃
- c# - ASP.NET MVC 不良做法:控制器操作不限于 POST - 误报?