gpt4 book ai didi

node.js - 在 golang 中为 http 响应创建自定义错误

转载 作者:行者123 更新时间:2023-12-04 17:17:28 24 4
gpt4 key购买 nike

我想为我目前正在处理的身份验证服务创建自定义错误。由于我必须为每个 http 响应创建一个错误,而且我对 golang 还很陌生,所以我遇到了困难。下面的代码是我想在 go 中实现的 javascript 代码的副本。

export abstract class CustomError extends Error {
abstract statusCode: number;

constructor(message: string) {
super(message);

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

abstract serializeErrors(): { message: string; field?: string }[];
}

像这样基于自定义错误创建扩展类

import { CustomError } from "./custom-error";

export class NotFoundError extends CustomError {
statusCode = 404;

constructor() {
super("Route not found");

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

serializeErrors() {
return [{ message: "Not Found" }];
}
}

这样我就可以从主文件中抛出或记录,即const existingUser = await User.findOne({ email });

    if (existingUser) {
throw new BadRequestError("Email is already in use");
}

所以用简单的语言,我想创建一个 CustomErrors 的对象/模型,它可以帮助创建更多样化的错误,例如 BadRequestError()

所以,我需要关于创建这个的帮助。 这是我的第一个问题

最佳答案

在 Go 中,您只需实现 error 接口(interface)即可创建自定义错误类型。

error 接口(interface)是:

type error interface {
Error() string
}

[如果您是 Go 的新手,我建议您从 Tour of Go on interfaces 开始]

例如:

type SyntaxError struct {
msg string // description of error
Offset int64 // error occurred after reading Offset bytes
}

func (e *SyntaxError) Error() string { return e.msg }

参见 this official Go blog post for more details .


这是针对错误类型的;如果您专门查找 HTTP 错误,服务器中的错误是通过将错误状态连同您需要的错误消息写入 http.ResponseWriter 来完成的,您可以使用助手 http.Error 为此。示例:

func myHandler(w http.ResponseWriter, req *http.Request) {
if (somethingIsWrong) {
http.Error(w, "the error message", http.StatusBadRequest)
}
}

http.Error 的最后一个参数是 HTTP 状态;查看 net/http stdlib 包文档,了解那里的选项。

现在,为了连接两者,http.Error 通常会使用自定义错误的 Error() 方法作为消息,并且状态确实是特定于应用程序的.

关于node.js - 在 golang 中为 http 响应创建自定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68328253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com