So generieren Sie eine eindeutige ID mit node.js

Lesezeit: 7 Minuten

Benutzer-Avatar
Eule

function generate(count) {
    var founded = false,
        _sym = 'abcdefghijklmnopqrstuvwxyz1234567890',
        str="";
    while(!founded) {
        for(var i = 0; i < count; i++) {
            str += _sym[parseInt(Math.random() * (_sym.length))];
        }
        base.getID(string, function(err, res) {
            if(!res.length) {
                founded = true; // How to do it?
            }
        });
    }
    return str;
}

Wie setze ich einen Variablenwert mit Datenbankabfrage-Callback? Wie kann ich es tun?

  • @JamesAllardice, ich muss verstehen, wie das mit einer Datenbankabfrage gemacht werden kann. Entschuldigung, danke.

    – Eule

    27. April 2014 um 18:10 Uhr

  • Diese Frage ist fälschlicherweise als Duplikat gekennzeichnet. Die verknüpfte Frage beantwortet, wie man es in generischem Javascript macht; Die am besten bewertete Antwort in dieser Frage ist spezifisch für node.js.

    – Mike Post

    12. August 2015 um 22:29 Uhr

  • Ich würde das gerne als Antwort einfügen: var hexstring = crypto.randomBytes(16).toString("hex"); gefolgt von var guidstring = hexstring.substring(0,8) + "-" + hexstring.substring(8,12) + "-" + hexstring.substring(12,16) + "-" + hexstring.substring(16,20) + "-" + hexstring.substring(20);

    – selbe

    19. Juni 2016 um 7:54 Uhr


  • Dies ist eine gute Antwort mit new mongo.ObjectID(); und manuell auf stackoverflow.com/a/56106999/4701635

    – Gemeinde Barad

    13. Mai 2019 um 11:45 Uhr

  • @selbie Nur dein Ergebnis sieht aus wie eine UUID und ist nicht immer eine gültige UUID. Dies kann Annahmen von nachgelagertem Code zunichte machen. Wenn Sie nur eine zufällige Kennung benötigen, verwenden Sie Ihre hextring, was perfekt ist. Wenn Sie eine UUID benötigen, erstellen Sie eine mit einer Bibliothek im richtigen Format/in der richtigen Version.

    – Marcel Waldvogel

    8. Juni 2021 um 10:00 Uhr

Benutzer-Avatar
Vinz243

NPM installieren uuid Paket (Quellen: https://github.com/kelektiv/node-uuid):

npm install uuid

und verwenden Sie es in Ihrem Code:

var uuid = require('uuid');

Dann erstellen Sie einige IDs …

// 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'

** UPDATE 3.1.0

Die obige Verwendung ist veraltetalso verwenden Sie dieses Paket wie folgt:

const uuidv1 = require('uuid/v1');
uuidv1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' 

const uuidv4 = require('uuid/v4');
uuidv4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' 

** AKTUALISIEREN 7.x

Und jetzt ist die obige Verwendung veraltet verwenden Sie dieses Paket also wie folgt:

const { 
  v1: uuidv1,
  v4: uuidv4,
} = require('uuid');

uuidv1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' 
uuidv4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' 

  • Welchen Unterschied macht es, wenn es sich um eine DB-Abfrage handelt? Sie haben eine eindeutige ID, verwenden Sie sie jetzt in der Schnittstelle, die Sie zur Kommunikation mit Ihrer Datenbank verwenden.

    – jraede

    27. April 2014 um 18:17 Uhr

  • @ishandutta2007 node-uuid ist veraltet: “VERALTET: Verwenden Sie stattdessen das uuid-Paket.”

    – diutsu

    24. April 2017 um 18:40 Uhr

  • @Downgoat, crypto.randomBytes(16).toString("hex") vs. uuidv4(), was ist eine bevorzugte Option? Der erste ist in Node.js integriert.

    – Mike

    16. Juni 2020 um 20:11 Uhr


  • nodejs v15.6.0 jetzt unterstützt crypto.randomUUID();

    – Filip Seman

    17. Mai 2021 um 18:05 Uhr

  • @FilipSeman Laut Dokumentation ist es bereits “Hinzugefügt in: v14.17.0” (nodejs.org/docs/latest-v14.x/api/…), was di ist und meinen Tag gerettet hat.

    – Köln_Muc

    8. September 2021 um 12:41 Uhr

Der schnellstmögliche Weg, um eine zufällige 32-Zeichen-Zeichenfolge in Node zu erstellen, ist die Verwendung von native crypto Modul:

const crypto = require("crypto");

const id = crypto.randomBytes(16).toString("hex");

console.log(id); // => f9b327e70bbcf42494ccb28b2d98e00e

  • Ich mag diese Lösung, weil keine externe Abhängigkeit benötigt wird. Ich fand auch, dass die base64-Version auch nützlich ist. crypto.randomBytes(3*4).toString('base64') //=> '9uzHqCOWI9Kq2Jdw'

    – Hiroschi

    26. November 2016 um 2:06 Uhr


  • Ist es zufällig oder einzigartig? Bitte erläutern Sie die Zufallsfunktion.

    – Maxime

    19. Dezember 2017 um 18:25 Uhr

  • ‘Erzeugt kryptografisch starke Pseudozufallsdaten.’ API

    – Standaa – Erinnere dich an Monica

    2. Mai 2018 um 10:47 Uhr

  • crypto ist jetzt in den Knoten selbst integriert. Sie erhalten diese Warnung, wenn Sie sie mit npm installieren: [email protected]: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in

    – AIion

    3. Mai 2018 um 11:22 Uhr


  • @owl Ich denke, das ist wirklich die beste Antwort. Würden Sie in Betracht ziehen, dies auf die gewählte Antwort zu aktualisieren?

    – Benutzer3692823

    29. April 2020 um 20:53 Uhr

Benutzer-Avatar
Dheeraj kumar Rao

Seit Node 14.17.0 können Sie nun das eingebaute Kryptomodul verwenden, um UUIDs zu generieren (UUIDv4 Flavored):

const { randomUUID } = require('crypto'); // Added in: node v14.17.0

console.log(randomUUID());

// '89rct5ac2-8493-49b0-95d8-de843d90e6ca'

Für mehr können Sie erkunden
https://nodejs.org/api/crypto.html#crypto_crypto_randomuuid_options

Notiz: crypto.randomUUID ist dreimal schneller als uuid. Und keine Notwendigkeit, zusätzliche Abhängigkeiten hinzuzufügen.

  • Der Kommentar ist falsch. crypto.randomUUID() funktioniert in v14 von node nodejs.org/dist/latest-v14.x/docs/api/…

    – Ryan Pfister

    4. Juni 2021 um 18:22 Uhr

  • Möglicherweise müssen Sie installieren @types/node damit das funktioniert.

    – Justin

    12. April um 16:11 Uhr

  • IMO die sauberste Lösung

    – Tim

    8. Juni um 8:12

Benutzer-Avatar
Safrazik

Einfach, zeitbasiert, ohne Abhängigkeiten:

(new Date()).getTime().toString(36)

oder

Date.now().toString(36)

Ausgabe: jzlatihl


plus Zufallszahl (Dank an die Antwort von @Yaroslav Gaponov)

(new Date()).getTime().toString(36) + Math.random().toString(36).slice(2)

Ausgabe jzlavejjperpituute

Benutzer-Avatar
Str

edit: shortid ist veraltet. Die Betreuer empfehlen die Verwendung nanoid stattdessen.


Ein weiterer Ansatz ist die Verwendung von Kurzkennung Paket von npm.

Es ist sehr einfach zu bedienen:

var shortid = require('shortid');
console.log(shortid.generate()); // e.g. S1cudXAF

und hat einige überzeugende Eigenschaften:

ShortId erstellt erstaunlich kurze, nicht sequentielle URL-freundliche eindeutige IDs. Perfekt für URL-Shortener, MongoDB- und Redis-IDs und alle anderen ID-Benutzer, die möglicherweise angezeigt werden.

  • Standardmäßig 7-14 URL-freundliche Zeichen: AZ, az, 0-9, _-
  • Nicht sequenziell, daher sind sie nicht vorhersehbar.
  • Kann beliebig viele IDs ohne Duplikate generieren, sogar Millionen pro Tag.
  • Apps können beliebig oft neu gestartet werden, ohne dass eine ID wiederholt wird.

  • “Apps können beliebig oft neu gestartet werden, ohne dass eine ID wiederholt wird.” Können Sie mir zeigen, wie shortid funktioniert?

    – Marineflamme

    6. November 2018 um 13:38 Uhr

  • @NavyFlame Bitte schön: github.com/dylang/shortid oder genauer gesagt github.com/dylang/shortid/issues/95

    – Str

    6. November 2018 um 13:44 Uhr

  • “shortid ist veraltet, da die Architektur unsicher ist. Wir empfehlen stattdessen Nano ID, das den Vorteil hat, dass es auch deutlich schneller als shortid ist.” github.com/ai/nanoid

    – Mike Stead

    11. Januar 2021 um 4:23 Uhr

Benutzer-Avatar
Rafalio

Es ist einige Zeit her, seit ich node.js verwendet habe, aber ich denke, ich könnte helfen.

Erstens haben Sie in node nur einen einzigen Thread und sollen Callbacks verwenden. Was mit Ihrem Code passieren wird, ist das base.getID Abfrage wird zur Ausführung in die Warteschlange gestellt, aber die while Schleife wird sinnlos als Besetztschleife ausgeführt.

Sie sollten Ihr Problem mit einem Rückruf wie folgt lösen können:

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
    });
}

Und als solches verwenden

generate(10, function(uniqueId){
  // have a uniqueId
})

Ich habe seit etwa 2 Jahren keine node/js mehr codiert und dies auch nicht getestet, aber die Grundidee sollte gelten – keine Besetztschleife verwenden und Rückrufe verwenden. Vielleicht möchten Sie sich das Node Async-Paket ansehen.

  • “Apps können beliebig oft neu gestartet werden, ohne dass eine ID wiederholt wird.” Können Sie mir zeigen, wie shortid funktioniert?

    – Marineflamme

    6. November 2018 um 13:38 Uhr

  • @NavyFlame Bitte schön: github.com/dylang/shortid oder genauer gesagt github.com/dylang/shortid/issues/95

    – Str

    6. November 2018 um 13:44 Uhr

  • “shortid ist veraltet, da die Architektur unsicher ist. Wir empfehlen stattdessen Nano ID, das den Vorteil hat, dass es auch deutlich schneller als shortid ist.” github.com/ai/nanoid

    – Mike Stead

    11. Januar 2021 um 4:23 Uhr

Benutzer-Avatar
Praveena

node-uuid ist veraltet, also bitte verwenden 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-Link

1313420cookie-checkSo generieren Sie eine eindeutige ID mit node.js

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy