“Instanceof”无法正常工作

Ste*_*ven 3 custom-exceptions node.js

我不知道这有什么问题,但instanceof似乎不起作用。

应用错误.ts

class AppError extends Error {
    public statusCode;

    constructor(message, statusCode) {
      super(message);

      this.name = this.constructor.name;

      Error.captureStackTrace(this, this.constructor);

      this.statusCode = statusCode || 500;
    }
}

export default AppError;
Run Code Online (Sandbox Code Playgroud)

错误请求错误.ts

import AppError from "./AppError";

class BadRequestError extends AppError {
    constructor(message?: string) {
        super(message || "Client sent a bad request", 400);
    }
}

export default BadRequestError;
Run Code Online (Sandbox Code Playgroud)

处理程序

try {
    throw new BadRequestError();
} catch (err) {
    if (err instanceof AppError) {
        responseCallback(err.statusCode, err.message, callback);
    } else {
        responseCallback(500, "Internal Server Error", callback);
    }
}
Run Code Online (Sandbox Code Playgroud)

预期结果:

状态码:400

消息:客户端发送了错误的请求

实际结果:

状态码:500

消息:内部服务器错误

Ste*_*ven 12

解决了!

将此行添加到BadRequestError类。

Object.setPrototypeOf(this, BadRequestError.prototype);
Run Code Online (Sandbox Code Playgroud)

BadRequestError

import AppError from "./AppError";

class BadRequestError extends AppError {
    constructor(message?: string) {
        super(message || "Client sent a bad request", 400);

        Object.setPrototypeOf(this, BadRequestError.prototype);
    }
}

export default BadRequestError;
Run Code Online (Sandbox Code Playgroud)

参考:https : //stackoverflow.com/a/41429145/8504830