Javascript 如何使用node.js生成唯一ID 函数生成(计数){ var=false, _sym='ABCDEFGHIJKLMNOPQRSTUVXYZ1234567890', str=''; 而(!成立){ 对于(变量i=0;i'6c84fb90-12c4-11e1-840d-7b25c5ee775a' //生成v4(随机)id uuid.v4();/->'110ec58a-a0f2-4ac4-8393-c866d813b8d1'
如何使用数据库查询回调设置变量值?我该怎么做?安装NPM软件包(来源:):Javascript 如何使用node.js生成唯一ID 函数生成(计数){ var=false, _sym='ABCDEFGHIJKLMNOPQRSTUVXYZ1234567890', str=''; 而(!成立){ 对于(变量i=0;i'6c84fb90-12c4-11e1-840d-7b25c5ee775a' //生成v4(随机)id uuid.v4();/->'110ec58a-a0f2-4ac4-8393-c866d813b8d1',javascript,node.js,express,Javascript,Node.js,Express,如何使用数据库查询回调设置变量值?我该怎么做?安装NPM软件包(来源:): npm安装uuid 并在代码中使用它: var uuid=require('uuid'); 然后创建一些ID //生成v1(基于时间的)id uuid.v1();/->'6c84fb90-12c4-11e1-840d-7b25c5ee775a' //生成v4(随机)id uuid.v4();/->'110ec58a-a0f2-4ac4-8393-c866d813b8d1' **更新3.1.0 上面的用法是,所以请
npm安装uuid
并在代码中使用它:
var uuid=require('uuid');
然后创建一些ID
//生成v1(基于时间的)id
uuid.v1();/->'6c84fb90-12c4-11e1-840d-7b25c5ee775a'
//生成v4(随机)id
uuid.v4();/->'110ec58a-a0f2-4ac4-8393-c866d813b8d1'
**更新3.1.0
上面的用法是,所以请像这样使用此软件包:
function generate(count) {
var founded = false,
_sym = 'abcdefghijklmnopqrstuvwxyz1234567890',
str = '';
while(!founded) {
for(var i = 0; i < count; i++) {
str += _sym[parseInt(Math.random() * (_sym.length))];
}
base.getID(string, function(err, res) {
if(!res.length) {
founded = true; // How to do it?
}
});
}
return str;
}
const uuidv1 = require('uuid/v1');
uuidv1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
const uuidv4 = require('uuid/v4');
uuidv4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'
**更新7.x
现在,上面的用法也是一样,所以请像这样使用此软件包:
function generate(count) {
var founded = false,
_sym = 'abcdefghijklmnopqrstuvwxyz1234567890',
str = '';
while(!founded) {
for(var i = 0; i < count; i++) {
str += _sym[parseInt(Math.random() * (_sym.length))];
}
base.getID(string, function(err, res) {
if(!res.length) {
founded = true; // How to do it?
}
});
}
return str;
}
const uuidv1 = require('uuid/v1');
uuidv1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
const uuidv4 = require('uuid/v4');
uuidv4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'
我已经有一段时间没有使用node.js了,但我想我可能能帮上忙 首先,在节点中,您只有一个线程,应该使用回调。您的代码将发生的情况是,
base.getID
查询将排队等待执行,但是while
循环将继续作为一个繁忙循环毫无意义地运行
您应该能够通过回调解决问题,如下所示:
const {
v1: uuidv1,
v4: uuidv4,
} = require('uuid');
uuidv1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
uuidv4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'
我已经有2年没有编写过任何node/js,也没有测试过,但基本的想法应该是——不要使用繁忙的循环,而是使用回调。您可能需要查看节点异步包。编辑:shortid已被弃用。维护人员建议改为使用
另一种方法是使用来自npm的包 它非常容易使用:
generate(10, function(uniqueId){
// have a uniqueId
})
并且有一些引人注目的特点:
ShortId创建了非常短的非顺序url友好的唯一
身份证。非常适合url缩写器、MongoDB和Redis ID以及任何其他
id用户可能会看到
- 默认情况下,7-14个url友好字符:A-Z、A-Z、0-9、_-
- 不连续,因此它们是不可预测的
- 可以生成任意数量的ID而无需重复,甚至每天可以生成数百万个ID
- 应用程序可以重新启动任意次数,而无需重复id
在节点中创建随机32字符字符串的最快方法是使用本机
crypto
模块:
var shortid = require('shortid');
console.log(shortid.generate()); // e.g. S1cudXAF
节点uuid
已弃用,因此请使用uuid
const crypto = require("crypto");
const id = crypto.randomBytes(16).toString("hex");
console.log(id); // => f9b327e70bbcf42494ccb28b2d98e00e
如果有人需要加密强UUID,也有解决方案 为什么不是UUIDs 随机UUID(UUIDv4)没有足够的熵可以普遍使用 独特(讽刺,嗯?)。随机UUID只有122位的熵, 这表明只有2^61id之后才会发生重复。 此外,一些UUIDv4实现不使用 加密强随机数生成器 此库使用Node.js crypto RNG生成240位的ID, 建议在生成2^120ID后发生第一次重复。 根据目前人类的能源生产情况,这 在可预见的未来,这一门槛是不可能跨越的
更简单,无需添加模块
var generateSafeId = require('generate-safe-id');
var id = generateSafeId();
// id == "zVPkWyvgRW-7pSk0iRzEhdnPcnWfMRi-ZcaPxrHA"
简单、基于时间、无依赖性:
Math.random().toString(26).slice(2)
输出:jzlatichl
加上随机数(感谢@Yaroslav Gaponov的回答)
输出
jzlavejjperpitute
我正在使用以下工具,它运行良好,没有任何第三方依赖关系
(new Date()).getTime().toString(36) + Math.random().toString(36).slice(2)
这里的解决方案很旧,现在已弃用: 使用以下命令: npm安装uuid
random_numbers = []
for (i = 0; i < 1000000; i++) {
random_numbers.push(Math.random());
//random_numbers.push(Math.random().toFixed(13)) //depends decimals default 16
}
if (i === 1000000) {
console.log("Before checking duplicate");
console.log(random_numbers.length);
console.log("After checking duplicate");
random_set = new Set(random_numbers); // Set removes duplicates
console.log([...random_set].length); // length is still the same after removing
}
在npm中使用
它将始终基于当前时间、进程和机器名创建唯一id
- 在当前时间内,ID在单个进程中始终是唯一的
- 对于进程ID,即使同时调用,ID也是唯一的 来自多个进程的时间
- 对于MAC地址,即使同时调用,ID也是唯一的 来自多台机器和流程的时间
- 很快
- 在多个进程和计算机上生成唯一id,即使 同时打电话来
- 8字节和12字节版本更短,唯一性更低
Math.random()
从数学上讲,分数在实空间[0,1]中相同的概率理论上为0。概率方面,node.js中默认长度为16位小数时,它大约接近于0。这种实现还应该减少算术溢出,因为不执行任何操作。此外,与字符串相比,它的内存效率更高,因为小数比字符串占用更少的内存
我称之为“分数唯一ID”
编写代码以生成1000000Math.random()
数字,但找不到任何重复的数字(至少对于默认的小数点16)。见以下代码(如有,请提供反馈):
随机数=[]
对于(i=0;i<1000000;i++){
随机数.push(Math.random());
//random_numbers.push(Math.random().toFixed(13))//取决于小数默认值16
}
如果(i==1000000){
控制台日志(“在检查副本之前”);
控制台。日志(随机数。长度);
控制台日志(“检查副本后”);
随机集=新集(随机数);//集删除重复项
console.log([…random_set].length);//删除后长度仍然相同
}
安装uuid
random_numbers = []
for (i = 0; i < 1000000; i++) {
random_numbers.push(Math.random());
//random_numbers.push(Math.random().toFixed(13)) //depends decimals default 16
}
if (i === 1000000) {
console.log("Before checking duplicate");
console.log(random_numbers.length);
console.log("After checking duplicate");
random_set = new Set(random_numbers); // Set removes duplicates
console.log([...random_set].length); // length is still the same after removing
}
uuid已更新,旧的导入
npm install --save uuid
不起作用,我们现在应该使用此导入<
//add these lines to your code
const { v4: uuidv4 } = require('uuid');
var your_uuid = uuidv4();
console.log(your_uuid);
npm i uniqid
Math.random()
random_numbers = []
for (i = 0; i < 1000000; i++) {
random_numbers.push(Math.random());
//random_numbers.push(Math.random().toFixed(13)) //depends decimals default 16
}
if (i === 1000000) {
console.log("Before checking duplicate");
console.log(random_numbers.length);
console.log("After checking duplicate");
random_set = new Set(random_numbers); // Set removes duplicates
console.log([...random_set].length); // length is still the same after removing
}
npm install --save uuid
const uuid= require('uuid/v4');
const {v4:uuid} = require('uuid');
const createdPlace = {
id: uuid(),
title,
description,
location:coordinates,
address,
creator
};
import crypto from 'crypto';
crypto.randomUUID(); // b544a5c2-41f5-4685-85a5-fffe03a8e8e6
const { randomUUID } = require('crypto'); // Added in: node v15.6.0
console.log(randomUUID());
//'89rct5ac2-8493-49b0-95d8-de843d90e6ca'