我正在使用API,并且试图以一种干净的方式来管理错误。
因此,我试图定义一个模块,该模块收集我可能想在我的API中抛出的所有 Error 子类。
这些类对应于我想返回给请求者的HTTP错误代码。我选择将它们全部单独放在一个模块中,因为我还将在其他几个模块中使用它们。
我想这样使用我的Error子类:
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
模块时缺少的内容。
答案 0 :(得分:5)
您有两个问题:
您不导出类。您正在导出一个函数,如果您调用它会创建类,但是由于它们对它们没有任何作用,因此将其丢弃。
对于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;
}
}
要解决第二个问题,在您的示例中,您仅使用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');