7

我正在Falcon为我的应用程序编写中间件。当我遇到任何错误时,我想引发错误,中断进程并返回我的自定义响应,如下所示:

{
   "status": 503,
   "message": "No Token found. Token is required."
}

但是标准Falcon错误实现不允许我为我的响应设置自定义字段。

如何最恰当地解决这个问题?

4

4 回答 4

6

在花了很多时间之后,我以这种有趣的方式解决了这个问题。我将代码放在 try/catch 块中,当捕获到错误时,我决定不引发Falcon错误,只是在设置响应状态和正文后尝试编写return关键字,因为方法是void,所以它不返回任何内容。现在看起来像:

resp.status = falcon.HTTP_403
resp.body = body

return
于 2016-12-12T15:24:09.397 回答
4

我仍在寻找一个例子,这里是为任何仍然需要它的人准备的:

from falcon.http_error import HTTPError

class MyHTTPError(HTTPError):

    """Represents a generic HTTP error.
    """

    def __init__(self, status, error):
        super(MyHTTPError, self).__init__(status)
        self.status = status
        self.error = error

    def to_dict(self, obj_type=dict):
        """Returns a basic dictionary representing the error.
        """
        super(MyHTTPError, self).to_dict(obj_type)
        obj = self.error
        return obj

使用:

error = {"error": [{"message": "Auth token required", "code": "INVALID_HEADER"}]}

raise MyHTTPError(falcon.HTTP_400, error)
于 2017-08-15T01:37:14.030 回答
1

创建 falcon 文档中解释的自定义异常类,搜索 add_error_handler

class RaiseUnauthorizedException(Exception):
    def handle(ex, req, resp, params):
        resp.status = falcon.HTTP_401
        response = json.loads(json.dumps(ast.literal_eval(str(ex))))
        resp.body = json.dumps(response)

将自定义异常类添加到 falcon API 对象

api = falcon.API()
api.add_error_handler(RaiseUnauthorizedException)
于 2018-04-11T04:56:19.030 回答
1
raise falcon.HTTPError(falcon.HTTP_503, 'No Token found. Token is required.')
于 2018-04-22T00:47:49.453 回答