每次在nodeJs中调用函数时如何生成唯一的UUID?
How to generate unique UUID every time function is called in nodeJs?
所以我正在做这个项目,导出一些包含敏感信息的数据文件,我想为每个文件生成 uuid。我正在使用节点 uuid 模块,但每次我 运行 我的函数时,UUID 实际上是相同的,旧文件被新文件覆盖,因为它的 UUID 是相同的。这是我的代码片段:
var nodeUuid = require('node-uuid');
var uuid = nodeUuid.v4();
function createFile(){
var filename = 'reports-'+uuid+'.txt';
}
...
createFile();
因此,每次我调用函数 createFile() 时,我都会得到相同的 UUID,并且我的文件会被覆盖,知道如何为每个新文件实际生成唯一 ID 吗?
移动 v4()
调用函数
function createFile(){
var uuid = nodeUuid.v4();
var filename = 'reports-'+uuid+'.txt';
}
目前您只会在首次加载脚本时生成一个 UUID。要在每次调用 createFile()
时生成一个新的,只需将生成移动到 createFile()
函数中:
var nodeUuid = require('node-uuid');
function createFile(){
var uuid = nodeUuid.v4();
var filename = 'reports-'+uuid+'.txt';
}
...
createFile();
我可能会迟到,但你可以在没有图书馆的情况下做到这一点:
下面的脚本是 node-uuid
v4 only library
的缩小版本
import { default as crypto } from 'crypto'
class _Uuid {
static v4(offset = 0){
let byteToHex = [], rnds = crypto.randomBytes(16)
rnds[6] = (rnds[6] & 0x0f) | 0x40 // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
rnds[8] = (rnds[8] & 0x3f) | 0x80 // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
for (var i = 0; i < 256; ++i) { byteToHex[i] = (i + 0x100).toString(16).substr(1) }
return ([byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], '-', byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], '-', byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], '-', byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], '-', byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], byteToHex[rnds[offset++]]]).join('')
}
}
const v4 = _Uuid.v4
export { v4 as default }
用法
import { default as uuid } from '_Uuid'
uuid() // 3ceb4f8f-cef9-400f-a394-80da0334273b
这是一个 ES6 脚本,它使用节点中的捆绑加密库,有助于简单、快速地生成 RFC4122 compliant v4 UUIDS. Source Code
所以我正在做这个项目,导出一些包含敏感信息的数据文件,我想为每个文件生成 uuid。我正在使用节点 uuid 模块,但每次我 运行 我的函数时,UUID 实际上是相同的,旧文件被新文件覆盖,因为它的 UUID 是相同的。这是我的代码片段:
var nodeUuid = require('node-uuid');
var uuid = nodeUuid.v4();
function createFile(){
var filename = 'reports-'+uuid+'.txt';
}
...
createFile();
因此,每次我调用函数 createFile() 时,我都会得到相同的 UUID,并且我的文件会被覆盖,知道如何为每个新文件实际生成唯一 ID 吗?
移动 v4()
调用函数
function createFile(){
var uuid = nodeUuid.v4();
var filename = 'reports-'+uuid+'.txt';
}
目前您只会在首次加载脚本时生成一个 UUID。要在每次调用 createFile()
时生成一个新的,只需将生成移动到 createFile()
函数中:
var nodeUuid = require('node-uuid');
function createFile(){
var uuid = nodeUuid.v4();
var filename = 'reports-'+uuid+'.txt';
}
...
createFile();
我可能会迟到,但你可以在没有图书馆的情况下做到这一点:
下面的脚本是 node-uuid
v4 only library
import { default as crypto } from 'crypto'
class _Uuid {
static v4(offset = 0){
let byteToHex = [], rnds = crypto.randomBytes(16)
rnds[6] = (rnds[6] & 0x0f) | 0x40 // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
rnds[8] = (rnds[8] & 0x3f) | 0x80 // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
for (var i = 0; i < 256; ++i) { byteToHex[i] = (i + 0x100).toString(16).substr(1) }
return ([byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], '-', byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], '-', byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], '-', byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], '-', byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], byteToHex[rnds[offset++]], byteToHex[rnds[offset++]]]).join('')
}
}
const v4 = _Uuid.v4
export { v4 as default }
用法
import { default as uuid } from '_Uuid'
uuid() // 3ceb4f8f-cef9-400f-a394-80da0334273b
这是一个 ES6 脚本,它使用节点中的捆绑加密库,有助于简单、快速地生成 RFC4122 compliant v4 UUIDS. Source Code