如何生成唯一的哈希并将其保存在我的 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 发送?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用GridFS上传文件并将其直接保存到MongoDB中
如何在laravel中为每个用户生成唯一的随机值并将其添加到数据库中