首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >猫鼬唯一NanoID

猫鼬唯一NanoID
EN

Stack Overflow用户
提问于 2022-05-09 16:01:25
回答 2查看 313关注 0票数 2
代码语言:javascript
复制
const user = new mongoose.Schema(
  {
    nano_id: {
      type: String,
      required: true,
      default: () => nanoid(7),
      index: { unique: true },
    },
...
}

如果不是唯一的,如何再次运行nanoid(7)?(自动运行,控制台中没有任何错误)

EN

回答 2

Stack Overflow用户

发布于 2022-07-21 22:04:25

有两种方法可以做到这一点:

  1. 首先通过搜索具有类似Nano ID的文档来防止错误发生,如果文档存在,则使用递归函数重新生成新的Nano ID。

代码语言:javascript
复制
const { customAlphabet } = require('nanoid');
const alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
const nanoid = customAlphabet(alphabet, 8);


// userRegistration controller or route...

  async function uniqueNanoId(query): Promise<string> {
    const nanoId = nanoid();
    const sameNanoId = await User.findOne({ nano_id:nanoId });
    if (sameNanoId) {
      return uniqueNanoId(query);
    }
    return nanoId;
  }

  const nanoId = await uniqueNanoId();
  const user = User.create({...userBody,nanoId});

//...

  1. 捕捉错误--正如@cachius所暗示的--并相应地重新生成唯一的Nano (未测试)。here

已经讨论了捕获重复密钥的问题。

  1. 奖金:问自己一个问题,我真的需要默认的猫鼬ID和Nano ID吗?如果不是,那么this是一个简单的解决方案。

代码语言:javascript
复制
// ...
_id: {
    type: String,
    default: () => nanoid(),
  },
// ...
票数 1
EN

Stack Overflow用户

发布于 2022-05-09 22:06:44

该数据库将抛出一个错误,您必须捕获并作出反应,再次生成相同的记录与新生成的纳米线。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72174936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档