Для решения, совместимого с RFC4122 версии 4, это однострочное (ish) решение является самым компактным, с которым я мог бы столкнуться .:
function uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
console.log(uuidv4())
Update, 2015-06-02: Помните, что уникальность UUID в значительной степени зависит от базового генератора случайных чисел (RNG). В приведенном выше решении для краткости используется Math.random()
, однако Math.random()
является , а не гарантированным высококачественным RNG. Для получения дополнительной информации см. Превосходную запись Адама Хиланда на Math.random () . Для более надежного решения рассмотрим что-то вроде модуля uuid [Отказ от ответственности: я автор], который использует доступные API RNG более высокого качества, где они доступны.
Update, 2015-08 -26: Как примечание, этот gist описывает, как определить, сколько идентификаторов может быть сгенерировано до достижения определенной вероятности столкновения. Например, при использовании UUID с 3.26x1015 версии 4 RFC4122 у вас есть вероятность столкновения 1-в-миллион.
Обновление, 2017-06-28: хорошая статья от разработчиков Chrome обсуждает состояние Math.random качества PRNG в Chrome, Firefox и Safari. tl; dr - По состоянию на конец 2015 года это «неплохо», но не криптографическое. Чтобы решить эту проблему, приведена обновленная версия вышеупомянутого решения, которое использует ES6, API crypto
и немного JS wizardy. Я не могу взять кредит за :
function uuidv4() {
return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
)
}
console.log(uuidv4());
Я выяснил, в чем проблема: у меня была ошибка CORS, когда я пытался использовать свою конечную точку Graphql с сервера разработки Angular (localhost:4200
), поэтому я создал прокси, который указал на мою конечную точку:
{
"/graphql/*": {
"target": "https://my-endpoint/",
"secure": false,
"logLevel": "debug",
"changeOrigin": true
}
}
И изменил URL Graphql на: http://localhost:4200/graphql
. Благодаря этому я смог решить проблему с CORS, однако, похоже, что Apollo Dev Tools также использует URI /graphql
.
Итак, я изменил свою конфигурацию прокси на:
{
"/stg_graphql/*": {
"target": "https://my-endpoint/graphql",
"secure": false,
"logLevel": "debug",
"changeOrigin": true,
"pathRewrite": {
"^/stg_graphql": ""
}
}
}
И указал graphql на: http://localhost:4200/stg_graphql
. Когда я сделал это, все начало работать.
Примечание: чтобы запустить сервер разработки с прокси-сервером, который я использую: ng serve --proxy-config proxy.config.json
.