API 错误处理在 postman 中有效,但客户端引发异常

API Error handling works in postman but client throws exception

提问人:Shamsuddeen Omacy 提问时间:9/18/2023 更新时间:9/18/2023 访问量:40

问:

如果尝试使用 Postman,我的 API 的错误处理会发送漂亮、清晰且易于理解的消息。但是在与我的客户端应用程序集成(我使用 PHP)时,它总是抛出异常。

实用程序错误响应

class ErrorResponse extends Error {
    constructor(message, statusCode) {
        super(message);
        this.statusCode = statusCode;

        Error.captureStackTrace(this, this.constructor);
    }
}

module.exports = ErrorResponse;

错误中间件

const ErrorResponse = require('../Utils/errorResponse');

const errorHandler = (err, req, res, next) => {
    let error = {
        ...err
    };

    error.message = err.message;

    // Log to console for dev
    console.log(err);
    // console.log(err.response.data);

    // Mongoose bad ObjectId
    if (err.name === 'CastError') {
        const message = `Resource not found`;
        error = new ErrorResponse(message, 404);
    }

    // Mongoose duplicate key
    if (err.code === 11000) {
        const message = 'Duplicate field value entered';
        error = new ErrorResponse(message, 400);
    }

    // Mongoose validation error
    if (err.name === 'ValidationError') {
        const message = Object.values(err.errors).map(val => val.message);
        error = new ErrorResponse(message, 400);
    }

    res.status(error.statusCode || 500).json({
        "status": "error",
        "message": error.message || 'Server Error'
    });
};

module.exports = errorHandler;

例:

return next(new ErrorResponse('Invalid credentials', 401));

我正在使用 Guzzle,使用 try-catch,但响应不干净。

try {

} catch (GuzzleHttp\Exception\ClientException $e) {
   return $e->getResponse();
}
PHP 节点 .js 快速 错误处理

评论

0赞 Barmar 9/18/2023
你在任何地方都没有声明。你期待抓住什么?返回错误与引发错误不同。throwtry/catch
0赞 Shamsuddeen Omacy 9/18/2023
我的问题是即使我没有使用 try-catch,Guzzle 也会抛出错误异常,以下响应为例 致命错误:未捕获 GuzzleHttp\Exception\ClientException:客户端错误:导致响应:{“status”:“error”,“message”:“无效帐户,找不到帐户”}POST http://localhost:3000/v2/transfers/name-enquiry400 Bad Request
1赞 Shamsuddeen Omacy 9/18/2023
通过向 Guzzle 客户端添加参数来解决:'http_errors' => false

答: 暂无答案