在尝试使用 buffalo-pop/pop/popmwTransaction
中间件时,我没有成功写入数据库。没有返回任何错误,并且调试输出显示了 SQL 语句,但没有提交更新和插入。
处理程序看起来像:
func MyHandler(c buffalo.Context) error {
tx, ok := c.Value("tx").(*pop.Connection)
if !ok {
return errors.New("no transaction found")
}
f := models.File{
Name: "file.txt",
}
if err := tx.Create(&f); err != nil {
return err
}
return nil
}
应用程序.go:
func App() *buffalo.App {
...
app.GET("/myhandler", MyHandler)
app.Use(popmw.Transaction(models.DB))
...
}
如果我DB, _ := pop.Connect("development")
用于我的连接,它可以正常工作。我还观察到,每次点击此处理程序时,表上的自动增量值都会发生变化。
在真实的应用程序中,我们不能调用c.Render
来报告响应代码,因为我们使用gqlgen
的是 http 处理程序。它看起来像这样:
func GQLHandler(c buffalo.Context) error {
h := handler.GraphQL(gqlgen.NewExecutableSchema(gqlgen.Config{Resolvers: &gqlgen.Resolver{}}))
newCtx := context.WithValue(c.Request().Context(), "BuffaloContext", c)
h.ServeHTTP(c.Response(), c.Request().WithContext(newCtx))
return nil
}