Есть два приложения: клиент на vue.js и бэкенд на laravel. Работают на одной машине и разведены по разным доменам, бэкенд крутистя на client.my (openserver), а клиент на localhost:9000 (nodejs)
На серверной части стоит middlewere, которое для всех апи запросов разрешает кроссдоменные запросы.
public function handle($request, Closure $next)
{
\Debugbar::disable();
header('Access-Control-Allow-Origin: *');
return $next($request);
}
В клиентской части отправляю запрос на api/cart/contacts с помощью vue-resource (экшон в vuex)
addContacts ({ commit, state }, contacts) {
Vue.http.options.emulateJSON = true
Vue.http.options.emulateHTTP = true
let data = JSON.stringify(contacts)
Vue.http.post('http://client.my/api/cart/add_contacts', {contacts: data}).then(response => {
console.log(123)
}, response => {
// error callback
})
},
Все ок - данные отправляются и промис отрабатывает, но после отправляю запрос на api/cart/complete
completeOrder ({ commit }) {
/*
Отпрвляем завершенный заказ на сервер
*/
Vue.http.options.emulateJSON = true
Vue.http.options.emulateHTTP = true
Vue.http.post('http://client.my/api/cart/complete').then(response => {
// Очистка корзины
commit('set', { type: 'cart', items: [] })
}, response => {
// error callback
})
},
Вылезает ошибка
Failed to load client.my/api/cart/complete: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'localhost:9000' is therefore not allowed access.
Оба метода (и contacts и complete) ничего не возвращают и отрабатывают без ошибок 100% Пробовал просто пустыми их оставлять, всервано первый проходит нормально, второй разворачивает.
Клиент
https://github.com/slowdream/client_vue/tree/master/src
Бэкенд
https://github.com/slowdream/client