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.
// 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:
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.
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
Dheeraj kumar Rao
Seit Node 14.17.0 können Sie nun das eingebaute Kryptomodul verwenden, um UUIDs zu generieren (UUIDv4 Flavored):
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
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
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?
“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
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?
“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
@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 vonvar 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