javascript - 如何在 JS 模块中定义错误类
问题描述
我正在研究一个 API,我正在尝试以一种干净的方式管理错误。所以我尝试定义一个模块来收集我可能想在我的 API 中抛出的所有错误子类。
这些类对应于我想返回给请求者的 HTTP 错误代码。我选择将它们单独放在一个模块中,因为我也会在其他几个模块中使用它们。
我想像这样使用我的错误子类:
require('../apiErrors');
function apiRequest(req, res) {
doRequest(req, function (err, data) {
if (err) {
throw new BadRequestError('Request is not good');
}
res.send(200, data);
})
}
我的模块是这样定义的:apiErrors.js
module.exports = () => {
class UnauthorizedError extends Error {
constructor(message) {
super(message);
this.name = 'UnauthorizedError';
this.code = 403;
}
}
class NotFoundError extends Error {
constructor(message) {
super(message);
this.name = 'NotFoundError';
this.code = 404;
}
}
class BadRequestError extends Error {
constructor(message) {
super(message);
this.name = 'BadRequestError';
this.code = 400;
}
}
};
这样做的结果是一个ReferenceError: BadRequestError is not defined
。apiErrors
在这一点上,我想知道我的做法是否确实干净,以及在导出模块时我缺少什么。
解决方案
你有两个问题:
您没有导出课程。您正在导出一个函数,如果您调用它会创建类,但随后会将它们丢弃,因为它对它们没有任何作用。
你没有对结果做任何事情
require('../apiErrors');
要修复 #1,请执行以下任一操作:
class UnauthorizedError extends Error {
constructor(message) {
super(message);
this.name = 'UnauthorizedError';
this.code = 403;
}
}
class NotFoundError extends Error {
constructor(message) {
super(message);
this.name = 'NotFoundError';
this.code = 404;
}
}
class BadRequestError extends Error {
constructor(message) {
super(message);
this.name = 'BadRequestError';
this.code = 400;
}
};
module.exports = {
UnauthorizedError,
NotFoundError,
BadRequestError
};
或者
module.exports.UnauthorizedError = class UnauthorizedError extends Error {
constructor(message) {
super(message);
this.name = 'UnauthorizedError';
this.code = 403;
}
};
module.exports.NotFoundError = class NotFoundError extends Error {
constructor(message) {
super(message);
this.name = 'NotFoundError';
this.code = 404;
}
};
module.exports.BadRequestError = class BadRequestError extends Error {
constructor(message) {
super(message);
this.name = 'BadRequestError';
this.code = 400;
}
}
要修复#2,在您刚刚使用的示例中BadRequestError
:
const { BadRequestError } = require('../apiErrors');
或者
const BadRequestError = require('../apiErrors').BadRequestError;
或者
const ErrorClasses = require('../apiErrors');
// ...then to use one of them...
throw new ErrorClasses.BadRequestError('Request is not good');
推荐阅读
- python - 当 a 和 b 都很大时(按 10**10 到 10**18 的顺序),如何计算 a**b?
- typescript - 如何在没有类型断言的语句中定义一个也是函数的对象(来自接口的对象)?
- c# - Winforms 应用程序在绘制图表时更改高 dpi 显示器上的缩放比例
- graphql - AWS AppSync 初始批量放置不更新缓存
- tensorflow - TensorFlow Lite 预训练模型需要哪些输入预处理
- chart.js - Chart Js,以不同方式在轴上设置一些刻度
- macos - mac Mojave 中的“编码所选视频文件”在哪里?
- python - 针对 Access 数据库的 pyodbc 查询出现“未实现可选功能”错误
- django - Django 管理员发送电子邮件以进行新用户注册
- javascript - Shopify - 自定义 createCart() 并在没有购买按钮的页面上使用