Запрос POST обрабатывается как OPTIONS на платформе beego

Я использую фреймворк 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


person under5hell    schedule 05.02.2015    source источник


Ответы (2)


Это может быть связано с тем, что в настоящее время ожидается слияние запроса/пулл-запроса с мастером: issue 912.

Без этой строчки все в порядке::

Похоже, это соответствует 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.on.

person VonC    schedule 05.02.2015
comment
Спасибо за ваш ответ. я удалил упоминание об этой строке в коммите f962475. но ошибка сохраняется. - person under5hell; 05.02.2015
comment
@ under5hell хорошо, я нашел только один случай этой ошибки, связанный с сеансом (я отредактировал ответ). Но это скорее подсказка, чем окончательный ответ. - person VonC; 05.02.2015

Я так справляюсь, надеюсь поможет

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()
}
person Delly Fabian Lucas    schedule 04.01.2018
comment
ЭТО ПОКАЗЫВАЕТ ОШИБКУ с API-интерфейсом beego, который не может использовать cors.Allow(&(литерал cors.Options)) (значение типа beego.FilterFunc) в качестве значения web.FilterFunc в аргументе для beego.InsertFilter - person Piyush Raj; 10.05.2021