如何生成唯一的哈希并将其保存在我的 MongoDB 文档中,而不必通过 req.body 发送?

Posted

技术标签:

【中文标题】如何生成唯一的哈希并将其保存在我的 MongoDB 文档中,而不必通过 req.body 发送?【英文标题】:How can I generate a unique hash and save it in my MongoDB document without it having to be sent via req.body? 【发布时间】:2020-08-19 12:49:46 【问题描述】:

如何生成唯一的哈希并将其保存在我的 Mongoose 文档中的键下,而不需要用户输入任何内容?我知道我可以取出必需的,但同时我想保持它是必需的,所以它总是存在的。这是我的代码:

模型/user.js


let ChannelSchema = new Schema(
  provider: type: String,
  stream_key: type: String,
  auth: 
    access_token: type: String,
    refresh_token: type: String,
  ,
  profile: 
    id: String,
    login: String
  ,
,  timestamps: true )

let UserSchema = new Schema(
  name: type: String, required: true, unique: true,
  email: type: String, required: true, unique: true,
  password: type: String, required: true, select: false,
  stream_key: type: String, required: true ,
  channel: [ ChannelSchema ]
);

let createStreamKey = (next) => 
  let user = this;
  if(!user.isNew('stream_key')) 
    return next();
  
  const id = crypto.randomBytes(20).toString('hex');
  user.stream_key = `sinuous_$id`;
  next();


UserSchema.pre('save', createStreamKey);

错误

Error [ValidationError]: User validation failed: stream_key: Path `stream_key` is required.
    at ValidationError.inspect (C:\Users\Who\WebstormProject\what\node_modules\mongoose\lib\error\validation.js:61:24)
    at formatValue (internal/util/inspect.js:563:31)
    at inspect (internal/util/inspect.js:221:10)
    at formatWithOptions (internal/util/inspect.js:1693:40)
    at Object.Console.<computed> (internal/console/constructor.js:272:10)
    at Object.log (internal/console/constructor.js:282:61)
    at C:\Users\Who\WebstormProject\what\routes\auth.js:23:15
    at processTicksAndRejections (internal/process/task_queues.js:93:5) 
  errors: 
    stream_key: MongooseError [ValidatorError]: Path `stream_key` is required.

【问题讨论】:

【参考方案1】:

您在createStreamKey 函数中使用了this 关键字,但这是一个箭头函数,那么this 关键字将无法按您的预期工作。

将其更改为“普通”函数语法(函数表达式),例如:

const createStreamKey = function(next) 
  let user = this;
  if (!user.isNew('stream_key')) 
    return next();
  
  const id = crypto.randomBytes(20).toString('hex');
  user.stream_key = `sinuous_$id`;
  next();

【讨论】:

以上是关于如何生成唯一的哈希并将其保存在我的 MongoDB 文档中,而不必通过 req.body 发送?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Node.js 和 MongoDB 存储密码

如何使用GridFS上传文件并将其直接保存到MongoDB中

NodeJS:将 JSON 保存到 MongoDB

如何在laravel中为每个用户生成唯一的随机值并将其添加到数据库中

如何在 laravel 中为每个用户生成唯一的自动增量值并将其添加到数据库中

iPhone:如何下载媒体文件并将其保存在设备上