2017-06-19 3 views
0

Ich arbeite an sehr grundlegende Web-app, wo der Server auf localhost läuft: 12345 und Client läuft auf localhost: 3000. Ich mache das, weil ich eine tatsächliche App geschrieben habe und es ein Problem in der Produktion gibt. Also begann ich mit dem Drilldown zum Basic und behebe das Problem. Aber ich habe versagt. Mein Backend ist in "go". Hier ist der erste html:Wie man Cors Problem auf lokalem System anpackt?

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title>This is page1</title> 
    </head> 
    <body> 
    Hi this is page1 

    <a href="index2.html" id='link'>About this web app</a> 
    </body> 



</html> 

Hier ist der zweite html:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title></title> 
    <script type="text/javascript" src='jquery.js'> 

    </script> 
    </head> 
    <body> 
    This is page2 
    </body> 
    <script type="text/javascript"> 
    $.ajax({ 
     type: 'GET', 
     url: 'http://localhost:12345/people', 
     contentType: 'application/json', 
     success: function(response){ 
     alert(response); 
     }, 
     error: function(err){ 
     alert(JSON.stringify(err)); 
     } 
    }) 
    </script> 
</html> 

Und schließlich der Back-End-Code:

package main 

import (
    "encoding/json" 
    "log" 
    "net/http" 
    "fmt" 
    "github.com/gorilla/mux" 
    "github.com/gorilla/handlers" 
) 

type Person struct { 
    ID  string `json:"id,omitempty"` 
    Firstname string `json:"firstname,omitempty"` 
    Lastname string `json:"lastname,omitempty"` 
    Address *Address `json:"address,omitempty"` 
} 

type Address struct { 
    City string `json:"city,omitempty"` 
    State string `json:"state,omitempty"` 
} 

var people []Person 

func GetPersonEndpoint(w http.ResponseWriter, req *http.Request) { 
    params := mux.Vars(req) 
    for _, item := range people { 
     if item.ID == params["id"] { 
      json.NewEncoder(w).Encode(item) 
      return 
     } 
    } 
    json.NewEncoder(w).Encode(&Person{}) 
} 


func GetPeopleEndpoint(w http.ResponseWriter, req *http.Request) { 
    json.NewEncoder(w).Encode(people) 
} 

func CreatePersonEndpoint(w http.ResponseWriter, req *http.Request) { 
    params := mux.Vars(req) 
    var person Person 
    _ = json.NewDecoder(req.Body).Decode(&person) 
    person.ID = params["id"] 
    people = append(people, person) 
    json.NewEncoder(w).Encode(people) 
} 

func DeletePersonEndpoint(w http.ResponseWriter, req *http.Request) { 
    params := mux.Vars(req) 
    for index, item := range people { 
     if item.ID == params["id"] { 
      people = append(people[:index], people[index+1:]...) 
      break 
     } 
    } 
    json.NewEncoder(w).Encode(people) 
} 

func main() { 
    router := mux.NewRouter() 
    people = append(people, Person{ID: "1", Firstname: "Nic", Lastname: "Raboy", Address: &Address{City: "Dublin", State: "CA"}}) 
    people = append(people, Person{ID: "2", Firstname: "Maria", Lastname: "Raboy"}) 
    fmt.Println(people); 
    router.HandleFunc("/people", GetPeopleEndpoint).Methods("GET") 
    router.HandleFunc("/people/{id}", GetPersonEndpoint).Methods("GET") 
    router.HandleFunc("/people/{id}", CreatePersonEndpoint).Methods("POST") 
    router.HandleFunc("/people/{id}", DeletePersonEndpoint).Methods("DELETE") 

    headersOk := handlers.AllowedHeaders([]string{"X-Requested-With"}) 
originsOk := handlers.AllowedOrigins([]string{os.Getenv("ORIGIN_ALLOWED")}) 
methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"}) 

// start server listen 
// with error handling 
log.Fatal(http.ListenAndServe(":" + os.Getenv("PORT"), handlers.CORS(originsOk, headersOk, methodsOk)(router))) 
} 
+1

Ich sehe keine CORS-Behandlung in den obigen Codeschnipsel. Teilen Sie Ihr Code-Snippet, das Sie ausprobiert haben. Verweise auch auf [SO-Post] (https://stackoverflow.com/questions/40985920/making-golang-gorilla-cors-handler-work), es würde dir einen Startpunkt geben. – jeevatkm

+0

@jeevatkm Brauchen wir einen Cors-Handler, auch wenn die App lokal läuft? –

+0

Ich glaube, deine Frage ist 'Wie man Cors Problem auf lokalem System anpackt?' Und deine Beschreibung hat 'ich schrieb eine tatsächliche APP und dort ist kors Problem in der Produktion'. Also, wenn Sie CORS nicht verwenden, was ist dann ein Problem? Vermisse ich etwas? – jeevatkm

Antwort

1

Ok, Die Lösung für die oben genannte Problem ist unter diesem Link Go Cors Handler. Es macht den Trick.