owl*_*owl 135 javascript node.js express
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;
}
Run Code Online (Sandbox Code Playgroud)
如何使用数据库查询回调设置变量值?我怎么能这样做?
Vin*_*243 263
使用https://github.com/broofa/node-uuid
npm install uuid
Run Code Online (Sandbox Code Playgroud)
然后创建一些ID ...
var uuid = require('uuid');
Run Code Online (Sandbox Code Playgroud)
**更新3.1.0
以上用法已弃用,因此请使用此包:
// Generate a v1 (time-based) id
uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
// Generate a v4 (random) id
uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'
Run Code Online (Sandbox Code Playgroud)
Pon*_*ono 194
在Node中创建随机32字符串的最快方法是使用本机crypto模块:
const crypto = require("crypto");
const id = crypto.randomBytes(16).toString("hex");
console.log(id); // => f9b327e70bbcf42494ccb28b2d98e00e
Run Code Online (Sandbox Code Playgroud)
str*_*str 27
另一种方法是使用npm 的shortid包.
这是非常容易使用:
var shortid = require('shortid');
console.log(shortid.generate()); // e.g. S1cudXAF
Run Code Online (Sandbox Code Playgroud)
并具有一些引人注目的功能:
ShortId创建了非常短的非连续url友好的独特ID.适用于网址缩短程序,MongoDB和Redis ID以及用户可能看到的任何其他ID.
- 默认情况下,7-14个网址友好字符:AZ,az,0-9,_-
- 非顺序,因此它们是不可预测的.
- 可以生成任意数量的ID而无需重复,甚至每天数百万.
- 应用程序可以重新启动任意次,而无需重复ID.
Dhe*_*Rao 19
const { randomUUID } = require('crypto'); // Added in: node v14.17.0
console.log(randomUUID());
// '89rct5ac2-8493-49b0-95d8-de843d90e6ca'
Run Code Online (Sandbox Code Playgroud)
有关更多信息,您可以探索 https://nodejs.org/api/crypto.html#crypto_crypto_randomuuid_options
注意:crypto.randomUUID比 uuid 快三倍。并且无需添加额外的依赖项。
Pra*_*ena 17
node-uuid 已弃用,请使用 uuid
npm install uuid --save
// Generate a v1 UUID (time-based)
const uuidV1 = require('uuid/v1');
uuidV1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
// Generate a v4 UUID (random)
const uuidV4 = require('uuid/v4');
uuidV4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'
Run Code Online (Sandbox Code Playgroud)
raf*_*lio 14
我使用node.js已经有一段时间了,但我想我可以提供帮助.
首先,在节点中,您只有一个线程,并且应该使用回调.您的代码会发生什么,是base.getID查询将排队等待执行,但while循环将继续作为忙循环无意义地运行.
您应该能够通过回调解决您的问题,如下所示:
function generate(count, k) {
var _sym = 'abcdefghijklmnopqrstuvwxyz1234567890',
var str = '';
for(var i = 0; i < count; i++) {
str += _sym[parseInt(Math.random() * (_sym.length))];
}
base.getID(str, function(err, res) {
if(!res.length) {
k(str) // use the continuation
} else generate(count, k) // otherwise, recurse on generate
});
}
Run Code Online (Sandbox Code Playgroud)
并使用它
generate(10, function(uniqueId){
// have a uniqueId
})
Run Code Online (Sandbox Code Playgroud)
我没有在大约2年内编码任何节点/ js并且没有测试过这个,但基本的想法应该保持 - 不要使用繁忙的循环,并使用回调.您可能希望查看节点异步包.
Roh*_*aki 10
安装uuid
npm install --save uuid
Run Code Online (Sandbox Code Playgroud)
uuid 已更新,旧的导入
const uuid= require('uuid/v4');
Run Code Online (Sandbox Code Playgroud)
不工作,我们现在应该使用这个导入
const {v4:uuid} = require('uuid');
Run Code Online (Sandbox Code Playgroud)
并使用它作为这样的功能
const createdPlace = {
id: uuid(),
title,
description,
location:coordinates,
address,
creator
};
Run Code Online (Sandbox Code Playgroud)
我的5美分:
const crypto = require('crypto');
const generateUuid = () => {
return [4, 2, 2, 2, 6] // or 8-4-4-4-12 in hex
.map(group => crypto.randomBytes(group).toString('hex'))
.join('-');
};
Run Code Online (Sandbox Code Playgroud)
不幸的是, Pono的字符串缺少连字符,因此它不符合uuid 标准,我相信这就是大多数人来这里的原因。
> generateUuid();
'143c8862-c212-ccf1-e74e-7c9afa78d871'
> generateUuid();
'4d02d4d6-4c0d-ea6b-849a-208b60bfb62e'
Run Code Online (Sandbox Code Playgroud)
更简单,没有附加模块
Math.random().toString(26).slice(2)
Run Code Online (Sandbox Code Playgroud)
简单,基于时间,没有依赖性:
(new Date()).getTime().toString(36)
Run Code Online (Sandbox Code Playgroud)
输出: jzlatihl
加上随机数(感谢@Yaroslav Gaponov的回答)
(new Date()).getTime().toString(36) + Math.random().toString(36).slice(2)
Run Code Online (Sandbox Code Playgroud)
输出量 jzlavejjperpituute
如果有人需要加密强的 UUID,也有解决方案。
https://www.npmjs.com/package/generate-safe-id
npm install generate-safe-id
Run Code Online (Sandbox Code Playgroud)
为什么不是 UUID?
随机 UUID (UUIDv4)没有足够的熵来普遍唯一(讽刺,嗯?)。随机 UUID的熵只有122 位,这表明仅在2^61 个ID之后就会发生重复。此外,一些 UUIDv4 实现不使用加密强随机数生成器。
该库使用 Node.js 加密 RNG生成240 位ID,这表明生成2^120 个ID后将出现第一个重复项。以人类目前的能源生产能力,在可预见的未来,这个门槛是不可能跨越的。
var generateSafeId = require('generate-safe-id');
var id = generateSafeId();
// id == "zVPkWyvgRW-7pSk0iRzEhdnPcnWfMRi-ZcaPxrHA"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
163216 次 |
| 最近记录: |