使用https://github.com/broofa/node-uuid
npm install uuid
然后创建一些ID ...
var uuid = require('uuid');
**更新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'
如果它在db查询中有什么区别?您有一个唯一的ID,现在可以在用于与数据库通信的任何接口中使用它. (44认同)
不推荐使用@ ishandutta2007 node-uuid:"DEPRECATED:改为使用uuid包." (5认同)
Pono.. 194
在Node中创建随机32字符串的最快方法是使用本机crypto
模块:
const crypto = require("crypto"); const id = crypto.randomBytes(16).toString("hex"); console.log(id); // => f9b327e70bbcf42494ccb28b2d98e00e
我喜欢这个解决方案,因为不需要外部依赖.另外我发现base64版本也很有用.`crypto.randomBytes(3*4).toString('base64')// =>'9uzHqCOWI9Kq2Jdw'` (37认同)
它是随机的还是唯一的?请详细说明随机功能. (4认同)
str.. 27
另一种方法是使用npm 的shortid包.
这是非常容易使用:
var shortid = require('shortid'); console.log(shortid.generate()); // e.g. S1cudXAF
并具有一些引人注目的功能:
ShortId创建了非常短的非连续url友好的独特ID.适用于网址缩短程序,MongoDB和Redis ID以及用户可能看到的任何其他ID.
默认情况下,7-14个网址友好字符:AZ,az,0-9,_-
非顺序,因此它们是不可预测的.
可以生成任意数量的ID而无需重复,甚至每天数百万.
应用程序可以重新启动任意次,而无需重复ID.
Praveena.. 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'
Npm链接
使用https://github.com/broofa/node-uuid
npm install uuid
然后创建一些ID ...
var uuid = require('uuid');
**更新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'
在Node中创建随机32字符串的最快方法是使用本机crypto
模块:
const crypto = require("crypto"); const id = crypto.randomBytes(16).toString("hex"); console.log(id); // => f9b327e70bbcf42494ccb28b2d98e00e
另一种方法是使用npm 的shortid包.
这是非常容易使用:
var shortid = require('shortid'); console.log(shortid.generate()); // e.g. S1cudXAF
并具有一些引人注目的功能:
ShortId创建了非常短的非连续url友好的独特ID.适用于网址缩短程序,MongoDB和Redis ID以及用户可能看到的任何其他ID.
默认情况下,7-14个网址友好字符:AZ,az,0-9,_-
非顺序,因此它们是不可预测的.
可以生成任意数量的ID而无需重复,甚至每天数百万.
应用程序可以重新启动任意次,而无需重复ID.
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'
Npm链接
我使用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 }); }
并使用它
generate(10, function(uniqueId){ // have a uniqueId })
我没有在大约2年内编码任何节点/ js并且没有测试过这个,但基本的想法应该保持 - 不要使用繁忙的循环,并使用回调.您可能希望查看节点异步包.
更简单,没有附加模块
Math.random().toString(26).slice(2)
简单,基于时间,没有依赖性:
(new Date()).getTime().toString(36)
输出: jzlatihl
加上随机数(感谢@Yaroslav Gaponov的回答)
(new Date()).getTime().toString(36) + Math.random().toString(36).slice(2)
输出量 jzlavejjperpituute