标签: servemux

使golang Gorilla CORS处理程序工作

我在这里设置相当简单,如下面的代码所述.但我无法CORS上班.我一直收到这个错误:

XMLHttpRequest无法加载http:// localhost:3000/signup.对预检请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许来源' http:// localhost:8000 '访问.响应具有HTTP状态代码403.

我相信我在这里缺少一些简单的东西.

这是我的代码:

package main

import (
    "log"
    "net/http"

    "github.com/gorilla/handlers"
    "github.com/gorilla/mux"
    "myApp/src/controllers"
)

func main() {
    ac := new(controllers.AccountController)

    router := mux.NewRouter()
    router.HandleFunc("/signup", ac.SignUp).Methods("POST")
    router.HandleFunc("/signin", ac.SignIn).Methods("POST")

    log.Fatal(http.ListenAndServe(":3000", handlers.CORS()(router)))
}
Run Code Online (Sandbox Code Playgroud)

go cors gorilla servemux

21
推荐指数
5
解决办法
2万
查看次数

在Golang中测试HTTP路由

我正在使用Gorilla mux和net/http包创建一些路由,如下所示

package routes

//some imports

//some stuff

func AddQuestionRoutes(r *mux.Router) {
    s := r.PathPrefix("/questions").Subrouter()
    s.HandleFunc("/{question_id}/{question_type}", getQuestion).Methods("GET")
    s.HandleFunc("/", postQuestion).Methods("POST")
    s.HandleFunc("/", putQuestion).Methods("PUT")
    s.HandleFunc("/{question_id}", deleteQuestion).Methods("DELETE")
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写测试来测试这些路线.例如,我试图测试GET路由专门尝试400返回,所以我有以下测试代码.

package routes

//some imports

var m *mux.Router
var req *http.Request
var err error
var respRec *httptest.ResponseRecorder

func init() {
    //mux router with added question routes
    m = mux.NewRouter()
    AddQuestionRoutes(m)

    //The response recorder used to record HTTP responses
    respRec = httptest.NewRecorder()
}

func TestGet400(t *testing.T) {
    //Testing get of non existent question …
Run Code Online (Sandbox Code Playgroud)

unit-testing go gorilla servemux

10
推荐指数
1
解决办法
9984
查看次数

什么是http请求多路复用器?

我一直在研究golang,我注意到很多人使用这个http.NewServeMux()函数创建服务器,我真的不明白它的作用.

我看了这个:

在go ServeMux是一个HTTP请求多路复用器.它将每个传入请求的URL与已注册模式的列表进行匹配,并调用与URL最匹配的模式的处理程序.

这与做以下事情有什么不同:

http.ListenAndServe(addr, nil)
http.Handle("/home", home)
http.Handle("/login", login)
Run Code Online (Sandbox Code Playgroud)

使用多路复用的目的是什么?

http go multiplexing servemux

8
推荐指数
2
解决办法
3007
查看次数

在一个程序中同时运行两个Web服务器

在go程序中,我想同时运行两个Web服务器,
显然它们将在两个不同的端口上服务(如果需要,还有ip地址),
问题是调用时http.handle,当我尝试注册处理程序时' /'对于第二台服务器,它恐慌并说已经有一个与'/'关联的处理程序,
我想我需要创建一个多路复用器DefaultServeMux以及我试图用它来做gorillaMux但无法搞清楚,

在同一个程序/进程中运行两个Web服务器是否存在根本性的问题.

为了更清楚,两个Web服务器中的一个是用作常规Web服务器,我需要第二个作为RPC服务器来在集群的不同节点上运行的程序的实例之间进行通信,

编辑:为了使它更清楚,这不是实际的代码,但它是要点

myMux := http.NewServeMux()
myMux.HandleFunc("/heartbeat", heartBeatHandler)

http.Handle("/", myMux)

server := &http.Server{
    Addr:    ":3400",
    Handler: myMux,
}
go server.ListenAndServe()

gorillaMux := mux.NewRouter()
gorillaMux.HandleFunc("/", indexHandler)
gorillaMux.HandleFunc("/book", bookHandler)

http.Handle("/", gorillaMux)

server := &http.Server{
    Addr:    ":1234",
    Handler: gorillaMux,
}

log.Fatal(server.ListenAndServe())
Run Code Online (Sandbox Code Playgroud)

webserver go mux gorilla servemux

3
推荐指数
1
解决办法
2163
查看次数

Go:如何组合两个(或更多)http.ServeMux?

鉴于您有两个实例http.ServeMux,并希望它们在相同的端口号上提供,如下所示:

    muxA, muxB http.ServeMux
    //initialise muxA
    //initialise muxB
    combinedMux := combineMux([muxA, muxB])
    http.ListenAndServe(":8080", combinedMux)
Run Code Online (Sandbox Code Playgroud)

combinedMux如上所述,如何编写函数?

......还是有另一种方法来完成同样的事情?

http go servemux

3
推荐指数
2
解决办法
2642
查看次数

标签 统计

go ×5

servemux ×5

gorilla ×3

http ×2

cors ×1

multiplexing ×1

mux ×1

unit-testing ×1

webserver ×1