Я использую VueJS для приложения, которое создаю.Сервер, который у меня есть, написан на Голанге и настроен на прием CORS.В приложении, в одном из моих компонентов, searchBar
, я настроил его на выборку некоторых данных перед его созданием.
var searchBar = {
prop: [...],
data: function() {
return { ... };
},
beforeCreate: function() {
var searchBar = this;
axios.request({
url: '/graphql',
method: 'post',
data: {
'query': '{courses{id, name}}'
}
})
.then(function(response) {
searchBar.courses = response.data.data.courses;
});
},
methods: { ... },
template: `...`
};
Axios отлично работает здесь.Он получает данные, которые мне нужны.searchBar
имеет кнопку, которая заставляет его генерировать событие, которое затем захватывается другим компонентом, searchResults
.После получения события searchResults
извлечет некоторые данные.
var searchResults = {
data: function() {
return { ... }
},
mounted: function() {
var sr = this;
this.$bus.$on('poll-server', function(payload) {
var requestData = {
url: '/graphql',
method: 'post',
data: { ... },
...
};
...
axios.request(requestData)
.then(function(response) {
console.log(response);
}
);
});
},
template: `...`
};
Обратите внимание, что мой запрос запроса Axios теперь находится внутри функции обратного вызова.Когда этот вызов выполнен, я получаю сообщение об ошибке CORS:
Доступ к XMLHttpRequest в 'http://127.0.0.1:9000/graphql' из источника' http://127.0.0.1:8080' заблокирован политикой CORS: Ответ напредварительный запрос не проходит проверку контроля доступа: в запрашиваемом ресурсе отсутствует заголовок «Access-Control-Allow-Origin».
Мой сервер расположен по адресу http://127.0.0.1:9000
, а клиент находится вhttp://127.0.0.1:8080
.Вот содержание OPTIONS
запроса второго вызова запроса.
Для сравнения приведен заголовок запроса первого вызова запроса(это работает!).
Я уже настроил свой сервер Golang для поддержки CORS через go-chi/cors
.Вот как это настроить.
router := chi.NewRouter()
...
// Enable CORS.
cors := cors.New(cors.Options{
AllowedOrigins: []string{"*"},
AllowedMethods: []string{"POST", "OPTIONS"},
AllowedHeaders: []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token"},
ExposedHeaders: []string{"Link"},
AllowCredentials: true,
MaxAge: 300,
})
router.Use(
render.SetContentType(render.ContentTypeJSON),
middleware.Logger,
middleware.DefaultCompress,
middleware.StripSlashes,
middleware.Recoverer,
cors.Handler,
)
router.Post("/graphql", gqlServer.GraphQL())
return router, db
Что вызывает у меня ошибку и как ее можно решить?