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;
}
Comment définir une valeur de variable avec le rappel de requête de base de données? Comment je peux le faire?
javascript
node.js
express
hibou
la source
la source
var hexstring = crypto.randomBytes(16).toString("hex");
var guidstring = hexstring.substring(0,8) + "-" + hexstring.substring(8,12) + "-" + hexstring.substring(12,16) + "-" + hexstring.substring(16,20) + "-" + hexstring.substring(20);
new mongo.ObjectID();
et manuellement stackoverflow.com/a/56106999/4701635Réponses:
Cela fait quelque temps que j'utilise node.js, mais je pense que je pourrais peut-être vous aider.
Premièrement, dans node, vous n'avez qu'un seul thread et êtes censé utiliser des rappels. Ce qui se passera avec votre code, c'est que la
base.getID
requête sera mise en file d'attente pour l'exécution, mais lewhile
boucle fonctionnera continuellement comme une boucle occupée inutilement.Vous devriez être en mesure de résoudre votre problème avec un rappel comme suit:
Et utilisez-le comme tel
Je n'ai codé aucun nœud / js depuis environ 2 ans et je n'ai pas testé cela, mais l'idée de base devrait tenir - n'utilisez pas de boucle occupée et utilisez des rappels. Vous voudrez peut-être jeter un œil au package node async.
la source
Installez le package uuid NPM (sources: https://github.com/kelektiv/node-uuid ):
et utilisez-le dans votre code:
Créez ensuite quelques identifiants ...
** UPDATE 3.1.0
L'utilisation ci-dessus est obsolète , utilisez donc ce package comme ceci:
** UPDATE 7.x
Et maintenant, l'utilisation ci-dessus est également obsolète , alors utilisez ce package comme ceci:
la source
Le moyen le plus rapide de créer une chaîne aléatoire de 32 caractères dans Node consiste à utiliser le
crypto
module natif :la source
crypto.randomBytes(3*4).toString('base64') //=> '9uzHqCOWI9Kq2Jdw'
crypto
est maintenant intégré au nœud lui-même .. Vous obtenez cet avertissement si vous l'installez npm:[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
Une autre approche consiste à utiliser le package shortid de npm.
Il est très simple à utiliser:
et a quelques caractéristiques convaincantes:
la source
node-uuid
est obsolète, veuillez donc utiliseruuid
Lien Npm
la source
Simple, basé sur le temps, sans dépendances:
Production:
jzlatihl
plus un nombre aléatoire (Merci à la réponse de @Yaroslav Gaponov)
Production
jzlavejjperpituute
la source
Plus facile et sans modules supplémentaires
la source
function getId(mask) { return mask.replace(/[x]/gi, () => { return Math.random().toString(26)[5]; }) } console.log(getId('xxxx-xxxx-xxxx-xxxx-xxxx-xxxx'));
random_numbers = [] for (i = 0; i < 1000000; i++) { random_numbers.push(Math.random()) } if (i === 1000000) { console.log("Before checking duplicate") console.log(random_numbers.length) console.log("After checking duplicate") random_set = new Set(random_numbers) console.log([...random_set].length) }
Si quelqu'un a besoin d'un UUID cryptographique fort, il existe également une solution pour cela.
https://www.npmjs.com/package/generate-safe-id
la source
generate-safe-id
son abandon ET des vulnérabilités de sécurité non corrigées (à partir d'août 2018)J'utilise ce qui suit et cela fonctionne bien plus sans aucune dépendance tierce.
la source
Les solutions ici sont anciennes et désormais obsolètes: https://github.com/uuidjs/uuid#deep-requires-now-deprecated
Utilisez ceci:
la source
utilisé https://www.npmjs.com/package/uniqid dans npm
Il créera toujours des identifiants uniques basés sur l'heure actuelle, le processus et le nom de la machine.
Caractéristiques:-
la source
pour installer uuid
uuid est mis à jour et l'ancienne importation
ne fonctionne pas et nous devrions maintenant utiliser cette importation
et pour l'utiliser, utilisez comme une fonction comme celle-ci =>
la source
Dans le prolongement de la réponse de YaroslavGaponov , la mise en œuvre la plus simple consiste simplement à utiliser
Math.random()
.Les chances que les fractions soient les mêmes dans un espace réel [0, 1] est théoriquement 0 et approximativement proche de 0 pour une longueur par défaut de 16 décimales dans node.js. Et cette implémentation devrait également réduire les débordements arithmétiques car aucune opération n'est effectuée. En outre, il est plus efficace en mémoire par rapport à une chaîne car les décimales occupent moins de mémoire que les chaînes.
J'appelle ça le "Chong-Fractional-Unique-ID" . Je n'ai toujours pas encore écrit d'article sur ses propriétés et j'espère y arriver bientôt.
Écrit du code pour générer 1 000 000 de
Math.random()
nombres et n'a pas pu trouver de doublons (au moins pour les points décimaux par défaut de 16). Voir le code ci-dessous (veuillez fournir des commentaires le cas échéant):la source
random_numbers.push(Math.random().toFixed(13))
donnent toujours la même longueur