【问题标题】:AngularJS and Go POST Request Method Not AllowedAngularJS 和 Go POST 请求方法不允许
【发布时间】:2016-04-05 02:33:52
【问题描述】:

我目前正在做一个示例项目,我使用 Go 和 AngularJS 我是新手。执行此代码后,我遇到了 405 Error Method Not Allowed。

示例.js

var app = angular.module('sample', []);
app.controller('sampleCtrl', function($scope, $http){
  $scope.submit = function(){
    //variables
    $scope.firstName = document.getElementById('firstName').value;
    $scope.middleName = document.getElementById('middleName').value;
    $scope.lastName = document.getElementById('lastName').value;
    $scope.age = document.getElementById('age').value;
    $http({
			method: 'POST',
			url: baseUrl +'/sample',
			headers: {'Content-Type': 'application/json'},
            data: {
              "firstName"   : $scope.firstName,
              "middleName"  : $scope.middleName,
              "lastName"    : $scope.lastName,
              "age"         : $scope.age
            }
		}).then(function successCallback(response){
              alert('Success');
	  });
    }
});

sample.go

package controllers

import (
    "github.com/astaxie/beego"
    "net/http"
    "fmt"
    "encoding/json"
)
type SampleController struct {
    beego.Controller
}

func (this *SampleController) Get(){
    this.TplName = "sample/sample.html"
  this.Render()
}

type Entry struct {
 FirstName string
MiddleName string
  LastName string
    Age int
}

func (this *SampleController) Submit(rw http.ResponseWriter, req *http.Request){
    decoder := json.NewDecoder(req.Body)
    var data Entry
    err := decoder.Decode(&data)
    if err != nil {
        fmt.Println("JSON Empty")
    }else{
        var firstName = data.FirstName
        //var middle = data.MiddleName
        //var lastName = data.LastName
        //var age = data.Age
        fmt.Println(firstName)
    }
}

routers.go

package routers

import (
	"test/controllers"
	"github.com/astaxie/beego"
)

func init() {
    beego.Router("/", &controllers.MainController{})
	beego.Router("/sample", &controllers.SampleController{})	beego.Router("/sample/Submit",&controllers.SampleController{},"post:Submit")
}

提前感谢您的帮助。

【问题讨论】:

    标签: javascript jquery angularjs go beego


    【解决方案1】:

    删除 baseUrl 并确保 url:"sample"。 也许你可以这样做 console.log(baseUrl); 检查 baseUrl 是否包含#;

    【讨论】:

    • 编译时显示页面未找到错误 404。并且终端在使用这种 url 时会发布错误。提交是控制器下的一个函数,而不是一个页面。
    【解决方案2】:

    我不是 Go 开发人员,但查看错误代码似乎您正在发出 POST 请求,但只为 GET 定义了路由。

    【讨论】:

    • beego.Router("/sample", &controllers.SampleController{}) beego.Router("/sample/Submit",&controllers.SampleController{},"post:Submit") 我有一个定义发帖路线试看
    【解决方案3】:

    在路由器中,您已将“/sample”定义为 GET,但您对 POST 方法进行了 ajax 调用,它在路由器中搜索 /sample,它会找到这个

    beego.Router("/sample", &controllers.SampleController{})

    重定向到 SampleController 但没有找到任何 POST 方法定义,因此找不到 405 方法。

    尝试在samplecontroller中添加

    func (this *SampleController) Post(){ ...// 你的代码在这里 }

    或添加

    beego.Router("/sample", &controllers.SampleController{"post:Sample"})

    并像提交一样在 samplecontroller 中添加一个函数示例

    【讨论】:

      猜你喜欢
      • 2017-12-09
      • 1970-01-01
      • 2016-05-15
      • 2019-01-04
      • 2020-11-02
      • 2016-04-23
      • 1970-01-01
      • 2018-07-24
      • 2017-03-15
      相关资源
      最近更新 更多