Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为URI(JavaScript/NodeJS)生成唯一字符串_Javascript_Node.js_Mongodb_Mongoose_Ecmascript 6 - Fatal编程技术网

为URI(JavaScript/NodeJS)生成唯一字符串

为URI(JavaScript/NodeJS)生成唯一字符串,javascript,node.js,mongodb,mongoose,ecmascript-6,Javascript,Node.js,Mongodb,Mongoose,Ecmascript 6,我正在写一个网站,我想为每篇文章生成一个随机链接。 我希望链接是唯一的。但我也想确保我可以有10万篇文章与独特的链接。(我使用的是MongoDB-mongoose)。 链接示例:qw463253qqrASd。 符号的最大数量:15 var PostSchema = new Schema({ title: String, url: {type: String, unique: true, default: (() => { let gen = "", poss

我正在写一个网站,我想为每篇文章生成一个随机链接。 我希望链接是唯一的。但我也想确保我可以有10万篇文章与独特的链接。(我使用的是MongoDB-mongoose)。 链接示例:qw463253qqrASd。 符号的最大数量:15

var PostSchema = new Schema({
    title: String,
    url: {type: String, unique: true, default: (() => {
        let gen = "", possible = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm0123456789";
        range(100).forEach((value, index) => gen += possible.charAt(Math.floor(Math.random() * possible.length)));
        return gen;
    })()},
    ...
});
附言:我确实有一个生成数字数组的函数。

看看这个模块

不过,有关此模块的一些警告:

  • 它没有很积极地维持
  • 它目前拒绝使用
    mongoose
    4.x版或更高版本
  • 它生成的ID往往以一个、两个或三个零开始

可能还有其他类似的模块。

“我在使用MongoDB”为什么不使用ObjectId?它们安全吗?Mongo ObjectId和UUID对于人性化URL来说太长了。您当前的解决方案是正确的,但是请理解,如果您在数据库中已经存在标识符的情况下实现重试逻辑,那么您可以使用更短的字符串(即更人性化的字符串)。例如,imgur.com多年来一直使用5个字符的标识符,直到它们必须增加到7个。是的,随着文章的增多,您的重试逻辑将花费越来越多的时间重试,因为冲突越来越多。但在你接近10亿篇文章之前,这种情况是不会发生的,这几乎是imgur.com从5到7长度标识符时的图像数量:你应该小心。
var ShortId = require('mongoose-shortid');

var PostSchema = new Schema({
    title: String,
    url: {
        type    : ShortId,
        len     : 15,
        base    : 62,
        alphabet: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
        retries : 4, // Four retries on collision
        index   : true
    },
});