【问题标题】:How to generate unique UUID every time function is called in nodeJs?每次在nodeJs中调用函数时如何生成唯一的UUID?
【发布时间】:2018-09-06 21:09:47
【问题描述】:

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

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

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

所以每次我调用函数 createFile() 时,我都会得到相同的 UUID,并且我的文件被覆盖,知道如何为每个新文件生成唯一的 id 吗?

【问题讨论】:

  • 这很奇怪,因为我在空文档中尝试过它,每次调用函数时它都会生成唯一的 Id..

标签: javascript node.js uuid


【解决方案1】:

v4()调用移入函数

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

【讨论】:

    【解决方案2】:

    目前,您只在首次加载脚本时生成一个 UUID。要在每次调用 createFile() 时生成一个新的,只需将生成移动到 createFile() 函数中:

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

    【讨论】:

      【解决方案3】:

      我可能会迟到,但你可以在没有图书馆的情况下做到这一点: 下面的脚本是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 脚本,它在 node 中使用捆绑的加密库,有助于简单、快速地生成符合 RFC4122 的 v4 UUIDS。 Source Code

      【讨论】:

        猜你喜欢
        • 2013-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-27
        • 2017-01-04
        相关资源
        最近更新 更多