Запрос CORS не удался

Я не видел такого конкретного подхода, поэтому я хотел бы использовать метод сравнения, который мне нравится использовать как для string, так и для number:

const objs = [ 
  { first_nom: 'Lazslo', last_nom: 'Jamf'     },
  { first_nom: 'Pig',    last_nom: 'Bodine'   },
  { first_nom: 'Pirate', last_nom: 'Prentice' }
];

const sortBy = fn => (a, b) => -(fn(a) < fn(b)) || +(fn(a) > fn(b))
const getLastName = o => o.last_nom
const sortByLastName = sortBy(getLastName)

objs.sort(sortByLastName)
console.log(objs.map(getLastName))

Вот объяснение sortBy():

sortBy() принимает параметр fn, который выбирает какое значение для объекта для использования в качестве сравнения и возвращает функцию, которая может передаются непосредственно на Array.prototype.sort(). В этом примере мы используем o.last_nom как значение для сравнения, поэтому всякий раз, когда мы получаем два объекта через Array.prototype.sort(), такие как

{ first_nom: 'Lazslo', last_nom: 'Jamf' }

и

{ first_nom: 'Pig', last_nom: 'Bodine' }

мы используем

(a, b) => -(fn(a) < fn(b)) || +(fn(a) > fn(b))

для их сравнения.

Вспоминая, что fn = o => o.last_nom, мы можем развернуть функцию сравнения с эквивалентом

(a, b) => -(a.last_nom < b.last_nom) || +(a.last_nom > b.last_nom)

. Логическое Оператор OR || имеет функцию короткого замыкания, которая здесь очень полезна. Из-за того, как это работает, тело функции выше означает

if (a.last_nom < b.last_nom) return -1
return +(a.last_nom > b.last_nom)

Итак, если a < b мы возвращаем -1, в противном случае, если a > b, то мы возвращаем +1, но если a == b, тогда a < b и a > b являются ложными, поэтому он возвращает +0.

В качестве дополнительного бонуса здесь эквивалент в ECMAScript 5.1 без функций стрелок, что, к сожалению, не совсем так:

var objs = [ 
  { first_nom: 'Lazslo', last_nom: 'Jamf'     },
  { first_nom: 'Pig',    last_nom: 'Bodine'   },
  { first_nom: 'Pirate', last_nom: 'Prentice' }
];

var sortBy = function (fn) {
  return function (a, b) {
    return -(fn(a) < fn(b)) || +(fn(a) > fn(b))
  }
}

var getLastName = function (o) { return o.last_nom }
var sortByLastName = sortBy(getLastName)

objs.sort(sortByLastName)
console.log(objs.map(getLastName))

-1
задан Paolo 13 July 2018 в 20:46
поделиться

3 ответа

Похоже, вы запускаете это в режиме dev через webpack? Если это правильно, и ваш рабочий процесс заключается в том, что вы собираетесь создавать приложение Vue и совместно использовать его с вашим Laravel-файлом, вам просто нужно обновить config/index.js, чтобы иметь запись proxyTable, которая пересылает запросы веб-пакета к правильному dev Laravel.

Это будет выглядеть примерно так.

module.exports = {
  dev: {
    proxyTable: {
      "/": "http://127.0.0.1:8000/api/v1/login"
    }
  }
}

Существует дополнительная информация о том, как это работает; https://vuejs-templates.github.io/webpack/proxy.html

0
ответ дан bigtunacan 17 August 2018 в 12:15
поделиться

Cross Origin Resource Sharing - это механизм, который использует дополнительные заголовки HTTP, чтобы сообщить браузеру, что веб-приложение, работающее на одном источнике (клиенте), имеет разрешение на доступ к выбранным ресурсам с сервера в другом источнике.

В основном, вашему Vue-приложению ( http: // localhost: 8080 ) должен быть разрешен доступ к вашей конечной точке Laravel ( http://127.0.0.1:8000/api/v1/ login ) Это должно помешать мне ударить конечную точку Laravel с моего вредоносного веб-сайта и действовать как аутентифицированный пользователь.

На основании docs вам нужно добавить 'allowedOrigins' => ['*'],, но это означает, что вы открываете свой сервер для всех запросов. Это нормально, если это общедоступный API, но в этом контексте это звучит не так, как вы этого хотите. Вместо этого в этом случае это будет 'allowedOrigins' => ['localhost:8080'],, чтобы ваше приложение Vue могло потреблять ваш сервер Laravel.

0
ответ дан Dan Hilton 17 August 2018 в 12:15
поделиться

Вы должны использовать либо localhost, либо 127.0.0.1 для всех запросов. Как правило, в коде вы должны делать вызовы на сервер, просто добавляя URI к текущему хосту, не добавляя хост и порт в строку URI. Если вы загружаете свою страницу с определенного хоста, например 127.0.0.1, а затем пытаетесь выполнить запрос AJAX другому хосту, например www.host.com, запрос блокируется для предотвращения атак XSS

0
ответ дан zizzo 17 August 2018 в 12:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: