BeeGo框架中将POST请求当作OPTIONS请求处理

4

我正在使用beego框架作为我的API框架,并在客户端使用AngularJS。我已经正确设置了所有的CORS设置。我可以进行GET请求。但是,当我尝试进行POST请求时,beego将其视为OPTIONS请求。它还抛出一个警告:multiple response.WriteHeader calls。可能出了什么问题?

我的beego CORS设置:

func init() {
    orm.RegisterDataBase("default", "mysql", "root:@tcp(127.0.0.1:3306)/fakeapi")
    beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
        AllowOrigins:     []string{"*"},
        AllowMethods:     []string{"GET", "DELETE", "PUT", "PATCH", "POST"},
        AllowHeaders:     []string{"Origin"},
        ExposeHeaders:    []string{"Content-Length"},
        AllowCredentials: true,
    }))

}

我的AngularJS请求

var transaction = $http.post(BASE_URL + "transaction", transactionData);
                return $q.all([transaction]).then(function(response) {
            console.log(response);
        });

我的系统: Ubuntu 14.04 beego版本:1.4.2 bee版本:1.2.4 angularJS版本:1.3.12

2个回答

2
这可能是由于当前有一个待合并到主分支的问题/拉取请求:issue 912

没有这一行,一切都很好:router.go#L861

这似乎与commit 3bb4d6f一致,它显示:

// Write status code if it has been set manually
// Set it to 0 afterwards to prevent "multiple response.WriteHeader calls"

(而且router.go确实设置了状态,因此出现了错误消息) Commit f962457应该解决这个问题,但目前尚未合并。
另一篇904问题提到无法检索先前在Session Engine中注册的会话数据。也许Session.on标志可以帮助解决。

谢谢您的回复。我已经删除了提交f962475中提到的那行代码,但错误仍然存在。 - under5hell
@under5hell 好的,我只找到了另一个涉及Session的错误实例(我已经编辑了答案)。但这更像是一个线索而不是最终答案。 - VonC

0

我是这样处理的,希望能帮到你

import (
_ "info_apoyo/routers"

"github.com/astaxie/beego"
"github.com/astaxie/beego/plugins/cors"
)

func main() {
if beego.BConfig.RunMode == "dev" {
    beego.BConfig.WebConfig.DirectoryIndex = true
    beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
}
beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
    AllowOrigins:     []string{"*"},
    AllowMethods:     []string{"GET", "POST", "DELETE", "PUT", "PATCH"},
    AllowHeaders:     []string{"Origin", "content-type", "Access-Control-
Allow-Origin"},
    ExposeHeaders:    []string{"Content-Length", "Access-Control-Allow-
Origin"},
    AllowCredentials: true,
}))
beego.Run()
}

这里使用beego api出现了错误 无法将cors.Allow(&(cors.Options literal)) (类型为beego.FilterFunc) 用作beego.InsertFilter的参数中的web.FilterFunc值 - Piyush Raj
@PiyushRaj 看起来你正在使用 Beego V2,而这个答案是针对 Beego v1 的。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接