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

时间:2015-10-23 10:42:49

标签: javascript node.js uuid

所以我正在开发这个项目,在那里我导出一些包含敏感信息的数据文件,我想为每个数据文件生成uuid。我正在使用节点uuid模块,但每次运行我的函数时,UUID实际上是相同的,旧文件被新文件覆盖,因为它的UUID是相同的。这里剪了我的代码:

var nodeUuid = require('node-uuid');
var uuid = nodeUuid.v4();

function createFile(){
    var filename = 'reports-'+uuid+'.txt';
}
...
createFile();

因此,每次调用函数createFile()时,我都会获得相同的UUID,并且我的文件会被覆盖,任何想法如何为每个新文件生成唯一ID?

3 个答案:

答案 0 :(得分:5)

v4()调用移至功能

function createFile(){
    var uuid = nodeUuid.v4();
    var filename = 'reports-'+uuid+'.txt';
}

答案 1 :(得分:1)

目前,您只在首次加载脚本时生成单个UUID。要在每次拨打createFile()时生成新的,只需在createFile()功能中移动代:

var nodeUuid = require('node-uuid');

function createFile(){
    var uuid = nodeUuid.v4();
    var filename = 'reports-'+uuid+'.txt';
}

...
createFile();

答案 2 :(得分:0)

我可能聚会晚了,但是您可以在没有图书馆的情况下进行此操作: 下面的脚本是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 UUIDS。 Source Code