这是我的 API 函数之一;如果我连续调用这个函数。仅显示加载的 api。没有得到任何回应..然后我的日志出现 502 错误
错误服务{“错误”:“超出上下文截止日期”,“errorVerbose”:“超出上下文截止日期\ngithub.com/ory/graceful.Graceful.func1\
我正在使用 go-gin
我不明白我的代码中有什么问题..
例如,我可以调用 API 5 次然后显示结果。然后在第 6 次加载。它是一个获取功能
我找不到根本原因。
附上我的api函数:
func (ser *service) GetPlaidUserInstitutionAccounts(ctx context.Context, impartWealthId string) (UserAccount, impart.Error) {
_, err := dbmodels.Users(dbmodels.UserWhere.ImpartWealthID.EQ(impartWealthId)).One(ctx, ser.db)
if err != nil {
impartErr := impart.NewError(impart.ErrBadRequest, "Could not find the user.")
ser.logger.Error("Could not find the user institution details.", zap.String("User", impartWealthId),
zap.String("user", impartWealthId))
return UserAccount{}, impartErr
}
userInstitutions, err := dbmodels.UserInstitutions(dbmodels.UserInstitutionWhere.ImpartWealthID.EQ(impartWealthId),
qm.Load(dbmodels.UserInstitutionRels.ImpartWealth),
qm.Load(dbmodels.UserInstitutionRels.Institution),
).All(ctx, ser.db)
if len(userInstitutions) == 0 {
return UserAccount{}, impart.NewError(impart.ErrBadRequest, "No records found.")
}
if err != nil {
impartErr := impart.NewError(impart.ErrBadRequest, "Could not find the user institution details.")
ser.logger.Error("Could not find the user institution details.", zap.String("User", impartWealthId),
zap.String("user", impartWealthId))
return UserAccount{}, impartErr
}
configuration := plaid.NewConfiguration()
cfg, _ := config.GetImpart()
if cfg != nil {
configuration.AddDefaultHeader("PLAID-CLIENT-ID", cfg.PlaidClientId)
configuration.AddDefaultHeader("PLAID-SECRET", cfg.PlaidSecret)
if cfg.Env == config.Production {
configuration.UseEnvironment(plaid.Production)
} else if cfg.Env == config.Preproduction {
configuration.UseEnvironment(plaid.Development)
} else {
configuration.UseEnvironment(plaid.Sandbox)
}
}
client := plaid.NewAPIClient(configuration)
userData := UserAccount{}
userData.ImpartWealthID = impartWealthId
userData.UpdatedAt = time.Now().UTC().Unix()
userinstitution := make(UserInstitutions, len(userInstitutions))
finalQuery := ""
for i, user := range userInstitutions {
institution := InstitutionToModel(user)
accountsGetRequest := plaid.NewAccountsGetRequest(user.AccessToken)
accountsGetResp, response, err := client.PlaidApi.AccountsGet(ctx).AccountsGetRequest(
*accountsGetRequest,
).Execute()
if response.StatusCode == 400 {
// defer response.Body.Close()
bodyBytes, _ := ioutil.ReadAll(response.Body)
type errorResponse struct {
ErrorCode string `json:"error_code" `
}
newRes := errorResponse{}
err = json.Unmarshal(bodyBytes, &newRes)
if err != nil {
fmt.Println(err)
}
if newRes.ErrorCode == "ITEM_LOGIN_REQUIRED" {
institution.IsAuthenticationError = true
}
}
if err != nil {
ser.logger.Error("Could not find the user plaid account details.", zap.String("User", impartWealthId),
zap.String("token", user.AccessToken))
continue
}
accounts := accountsGetResp.GetAccounts()
userAccounts := make(Accounts, len(accounts))
query1 := ""
query := ""
logwrite := false
for i, act := range accounts {
userAccounts[i], query1 = AccountToModel(act, user.UserInstitutionID)
query = fmt.Sprintf("%s %s", query, query1)
logwrite = true
}
institution.Accounts = userAccounts
userinstitution[i] = institution
userData.Institutions = userinstitution
if logwrite {
finalQuery = fmt.Sprintf("%s %s", finalQuery, query)
}
}
if finalQuery != "" {
go func() {
lastQuery := "INSERT INTO `user_plaid_accounts_log` (`user_institution_id`,`account_id`,`mask`,`name`,`official_name`,`subtype`,`type`,`iso_currency_code`,`unofficial_currency_code`,`available`,`current`,`credit_limit`,`created_at`) VALUES "
lastQuery = fmt.Sprintf("%s %s", lastQuery, finalQuery)
lastQuery = strings.Trim(lastQuery, ",")
lastQuery1 = fmt.Sprintf("%s ;", lastQuery)
ser.logger.Info("Query", zap.Any("Query", lastQuery1))
_, err = queries.Raw(lastQuery1).QueryContext(ctx, ser.db)
if err != nil {
ser.logger.Error("error attempting to log in user_plaid_accounts_log ", zap.Any("user_plaid_accounts_log", lastQuery1), zap.Error(err))
}
}()
}
return userData, nil
}
在这里我在 main.go 中遇到错误
if err := graceful.Graceful(server.ListenAndServe, server.Shutdown); err != nil {
logger.Fatal("error serving", zap.Error(err))
}