Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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生成唯一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软件包(来源:):

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”

编写代码以生成1000000
Math.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'