【问题标题】:Mongoose vs MongoDB validationMongoose 与 MongoDB 验证
【发布时间】:2019-03-08 03:35:16
【问题描述】:

我正在处理一个项目,并遵循用户创建指南。目标是创建一个具有唯一用户名、唯一电子邮件和 bcrypt 密码的用户。一旦使用了用户名或电子邮件,其他用户就不能使用该用户名或电子邮件进行注册。

该过程涉及创建用户,通过 Post 请求使用以下 Schema,使用 postman。在创建用户后添加了“唯一”指示符。在我更新架构以包含“唯一”选项后,我发现仍然可以使用相同的电子邮件创建用户。在这里搜索时,我发现这是由于使用该电子邮件创建的初始文档,并且通过删除该集合并重新开始来解决,这不是一个大问题。

var UserSchema = new Schema({
username: { type: String, lowercase: true, required: true, unique: 
true},
password: { type: String, required: true },
email: { type: String, required: true, lowercase: true, unique: true}
});

但是,在研究 Mongoose 网站时,我发现了一些关于验证的信息,这让我有些困惑。我正在查看 validation 文档,然后查看 Mongoose 网站上的 FAQ在创建时是唯一的,而不是使用“唯一”选项。

这是正确的吗?或者,当 Mongoose 告诉我最终我实际上需要使用 MongoDB Shell 时,为什么我会在 Mongoose 中使用“唯一”?使用 Schema validation available in MongoDB 时,Mongoose 是否仍然是开发 MEAN 应用程序时的首选?我确实看到 Mongoose 经常被使用,但我没有任何大的意见或需要做一些尽可能相关的东西,Mongoose 是否仍然值得学习仅仅使用 MongoDB 本身?如果我错了,那会很痛,这很好,我可以接受,但任何见解都会受到赞赏。

【问题讨论】:

  • Mongoose 仍然拥有强大的中间件、自定义验证器(可以是自定义简单函数)、通过描述符的模式继承、虚拟字段等。在做出决定之前,您应该检查一下 mongoose 的特性。 mongoosejs.com/docs/guides.html

标签: node.js mongodb mongoose mean-stack mean


【解决方案1】:

您可以使用 MongoDB Native Driver for Node.js 代替 Mongoose。我发现使用 Mongoose 的 Schema 更简单,更具有关联性。在这种情况下并没有真正的错误或正确,但是 Mongoose 有一点性能下降,如下所示: Performance

您也可以使用带有mongoose-unique-validator 包的Mongoose 来处理unique 验证。 Link for the package

const mongoose = require('mongoose');
const uniqueValidator = require('mongoose-unique-validator');

var UserSchema = mongoose.Schema({
  username: { type: String, lowercase: true, required: true, unique: true},
  password: { type: String, required: true },
  email: { type: String, required: true, lowercase: true, unique: true}
});

userSchema.plugin(uniqueValidator);

【讨论】:

  • 感谢您的信息。我已经用得够多了,我现在正在考虑坚持使用 MongoDB Native。 mongoose-unique-validator 也有助于进行更严格的验证,因此您回答了两个问题:D
猜你喜欢
  • 2016-04-10
  • 2022-01-08
  • 2015-06-23
  • 1970-01-01
  • 2017-11-28
  • 2020-11-02
  • 2020-10-14
  • 2011-10-03
相关资源
最近更新 更多