如何在nodeJs中每次调用函数时生成唯一的UUID



所以我在这个项目中工作,我导出一些数据文件与敏感信息,我想为他们每个生成uid。我使用节点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专用库

的缩小版本
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的v4 uuid。源代码

最新更新