【问题标题】:golang appengine internal server errorgolang appengine 内部服务器错误
【发布时间】:2013-01-10 14:10:20
【问题描述】:

我正在尝试在 Go on GAE 中开发自定义用户模型/身份验证代码。以下代码是对 demos/guestbook 应用中部分代码的简单修改:

q := datastore.NewQuery("User").Filter("Email =", email)
users := make([]User, 0, 1)
if _, err := q.GetAll(c, &users); err != nil {
   http.Error(w, err.Error(), http.StatusInternalServerError)
   return
}

从表单中提取电子邮件的位置。它只是使用给定的电子邮件查询用户的数据存储。如果拥有电子邮件的用户存在,它可以正常工作,如果不存在,则会出现“内部服务器错误”页面。我不明白的是(我猜是关于 Go 中的错误处理,或者可能是数据存储查询),这就是为什么我不能在 if error 块中做任何其他事情。像这样的一个小模组:

if _, err := q.GetAll(c, &users); err != nil {
   fmt.Fprintf(w, "%s\n", "user not found")
}

产生相同的“内部服务器错误”页面,而不是仅仅打印“找不到用户”。

谢谢!

【问题讨论】:

    标签: google-app-engine go internal-server-error


    【解决方案1】:

    没有看到你的其余代码很难说,但重点是当你说:

    if _, err := q.GetAll(c, &users); err != nil {
       fmt.Fprintf(w, "%s\n", "user not found")
    }
    

    只有在查询过程中有错误时才会触发内部语句,如果查询没有返回则不会触发。因此,您实际上并没有输入该代码块 - 我最好的猜测(没有看到代码)是您的 Internal Server Error 正在其他地方触发,也许是您将 users 视为包含数据的变量的地方。如果您想在没有匹配到用户的情况下打印出该消息,您可以执行一些简单的操作,例如检查响应的长度 - 如果是 0,则没有返回任何结果,您可以打印您的消息:

         if len(users) == 0 {
             fmt.Fprintf(w, "%s\n", "user not found")
         }
    

    可能有一种更惯用的方式,但我相信这将适用于您的情况(它会按照您在此处的说明打印 - 您可能希望以不同的方式处理它)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 2019-02-19
      • 2017-03-02
      相关资源
      最近更新 更多