我有一个基本的go API服务器,它从数据库中提供“作业”,并在JSON响应中返回,并将Access-Control-Allow-Origin:*添加到标头中。
func GetJob(w http.ResponseWriter, r *http.Request) {
job := Job{}
db, err = gorm.Open("postgres", connString)
if err != nil {
panic("Could not connect to the database")
}
defer db.Close()
vars := mux.Vars(r)
jobID, err := strconv.Atoi(vars["jobid"])
if err != nil {
panic("can't convert string")
}
db.Debug().Where("id = ?", jobID).First(&job)
w.Header().Set("Access-Control-Allow-Origin", "*")
json.NewEncoder(w).Encode(&job)
}
这是为了阅读我用角度飞镖编写的客户端应用程序:
class DataService {
final _headers = {'Content-Type': 'text/plain'};
var jobUrl = 'http://127.0.0.1:9000/job';
final Client _http;
DataService(this._http);
Future<Job> getJob(int id) async {
try{
final response = await _http.get('$jobUrl/$id/');
return new Job.fromJson(_extractData(response));
}
catch (e) {
throw _handleError(e);}
}
在postman上,我可以访问它,也没有Access-Control-Allow-Origin标题的问题。但是,当我从应用程序调用getJob(1)函数时,chrome会抛出错误:
XMLHttpRequest无法加载http://127.0.0.1:9000/job/1/。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:8080”访问。
关于我在这里缺少的任何想法?最有可能的一切。