猫鼬预保存和验证之间的区别?什么时候使用哪一个?

2024-03-18

目前我正在使用pre('save')进行验证:

UserSchema.pre('save', true, function(next, done) {
    var self = this //in case inside a callback
    var msg = helper.validation.user.username(self.username)
    if (msg) {
        self.invalidate('username', msg)
        done(helper.getValidationError(msg))
    }
    else
        done()
    next()
})

辅助模块具有接受输入并返回错误消息的函数。

exports.user = {
    username: function(input) {
        if (!input)
            return 'username is required'
        var min = 3
        var max = 10
        if (input.length < min)
            return 'username min of length is ' + min
        if (input.length > max)
            return 'username max of length is ' + max
        return null
    }
}

还有另一个apivalidate做类似的事情。它们之间有什么区别,在什么情况下我应该使用哪一种?


Update:

验证在用户定义的挂钩之前执行。您可以关注这个 github 帖子 https://github.com/Automattic/mongoose/issues/400,贡献者指出,

不执行此操作。首先验证让我们有机会停下来 在继续进入可能包括异步的用户定义的挂钩之前 其他集合的更新。

如果我们在内部进行更改后需要再次运行验证 我们总是可以手动运行的钩子this.validate(next).


过时的:罢工>

是的,我知道有一点小小的区别。

预挂钩在验证之前执行。

github 上有一个已关闭的问题,要求在 pre hooks 之前进行验证,https://github.com/Automattic/mongoose/issues/400 https://github.com/Automattic/mongoose/issues/400.


And also there is a reason for not having validation before pre hooks, stated in the same link by @kamholz:

假设您有两个字段,foo 和 fooSort,两者都是必需的。 fooSort 是一个 要使用的 foo 的小写或其他转换版本 排序。既然 fooSort 可以自动生成,那就有意义了 在预保存挂钩中执行此操作。但由于验证首先运行,所以它会 在预保存挂钩运行之前失败并有机会填写 fooSort 值。这不是能否运行验证的问题 再次手动。

同样,如果您想验证某些内容,然后需要进行后验证的钩子:

UserSchema.post('validate', function(next){
    console.log("post validate called");
    next();
});

So for summary, the one difference i see is,
  1. 只要您将输入直接保存在数据库中而不改变任何内容(仅验证),您就可以使用两者。

  2. 如果您要更改任何内容,则必须使用预保存挂钩。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

猫鼬预保存和验证之间的区别?什么时候使用哪一个? 的相关文章

  • Mongoose 4.4.12 中 Schema 方法范围内的“this”为空 {}

    当在 Schema 方法内记录到控制台时 对象 this 为 这发生在一天前 我一直在阅读教程和其他堆栈溢出问题 但不幸的是我没有找到原因的解决方案 这是我的模型 var mongoose require mongoose var Sche
  • OSX 10.7.5 上的 node-gyp -- dyld:惰性符号绑定失败:找不到符号

    我搜索了很多 我发现与同一问题最接近的是这个 也没有答案 问题 未找到符号 libintl gettext https stackoverflow com questions 13759044 symbol not found libint
  • Flask 不加载配置

    我在 Flask 中加载配置时遇到问题 from config import config DevelopmentConfig TestingConfig ProductionConfig def create app config nam
  • mocha.opts 已弃用,如何迁移到 package.json?

    我正在开发一个大型项目 自从上周我更新了摩卡以来 现在我们收到警告 DeprecationWarning 通过 mocha opts 进行的配置已被弃用并且 将从 Mocha 的未来版本中删除 使用 RC 文件或 改为 package js
  • Strongloop 环回 如何使用路由进行静态服务?

    我想做类似的事情 server js app use client loopback static dirname client using middleware json 但该示例仅适用于根 files loopback static p
  • 无法从 bash 脚本使用 nvm

    我正在尝试编写一个 shell 脚本来自动设置我的开发环境 安装 python nvm node mongo 等 我正在使用 nvm 来安装 Node js 它告诉您关闭并重新打开终端以开始使用 nmv 命令 我尝试获取 bashrc 和
  • 使用 Node.js 访问用 C++ 编写的 SDK

    我有一个用 C 语言编写的 SDK 可以与我的扫描仪设备进行通信 我需要开发一个可以访问扫描仪设备的电子应用程序 我知道有很多库可用于扫描仪 但我想使用这个 SDK 因为它允许我访问设备的完整功能 而且它是由设备制造商提供的 那么 有没有什
  • MongoDB 存储过程等效项

    我有一个包含商店列表的大型 CSV 文件 其中一个字段是邮政编码 我有一个名为 ZipCodes 的独立 MongoDB 数据库 它存储任何给定邮政编码的纬度和经度 在 SQL Server 中 我将执行一个名为 InsertStore 的
  • 在 Mongoose 中保存模型无法保存嵌套组件

    我有以下模型架构 var memberSchema mongoose Schema project type Schema Types ObjectId ref Project first String last String email
  • 在 Node.js 中创建 JSON 数组

    我需要在用 Node js 编写的服务器中创建一个 JSON 字符串 以便在请求时发送到客户端 问题是这个 JSON 取决于服务器中的可用数据 因此 JSON 数组的大小并不总是相同 我已经尝试了一整天 但尽管我感觉很接近 但我仍然不明白
  • 将 Django +1.10 与 MongoDB 连接

    在过去的几个月里 有人为 MongoDB 更换了 Django 1 10 中的默认数据库引擎吗 我在谷歌上得到的所有信息都是六四年前的 最常见的结果包括mongodb 引擎这需要Django nonrel 来自 Django 1 5 的一个
  • Nodejs + npm,在ntfs分区安装模块

    我在安装 npm 模块时遇到问题 NodeJS 安装在 Windows 主机上 Virtual Box 上运行的 Ubuntu 11 10 上 我的项目文件位于 NTFS 分区上 我必须与 Windows 共享它们 当我尝试安装某些 npm
  • 我可以将 Play 与 DynamoDB 一起用于 AWS 上的 Web 应用程序吗?

    我正在为最终用户设计一个图像存储应用程序 它将具有许多 CRUD 类型的功能 我想在 Amazon Web Services AWS 上托管该应用程序 并打算使用该游戏 框架 S3 和 NoSQL 数据库 我找不到适用于 Play 的 Dy
  • MongoDB Java 嵌套文档无法使用键名中的点进行访问

    当在Java中使用MongoDB API时 我试图检索以下值two在如下所示的文档中 data id 1234 one two three 我正在运行这个 MongoCollection
  • 茉莉花节点没有输出

    我是 JavaScript Node js 和 jasmine 的新手 我正在尝试运行 Node Craftsman Book 一书中的测试 FilesizeWatcher 我创建了 package json 文件并运行 npm insta
  • MongoDB 嵌套数组查询

    我问这个作为评论another https stackoverflow com questions 5250652 query a nested array in mongodb问题 还发了一个question https groups g
  • 运行“npm”返回“错误:找不到模块‘继承’”

    module js 340 throw err Error Cannot find module inherits at Function Module resolveFilename module js 338 15 at Functio
  • Node.js 中的 Twilio 短信回复

    我正在使用 node js 中的 twilio 编写移动通知系统 目前可以向用户发送短信 但我希望用户能够回复我 我需要收集用户发送文本的电话号码以及消息的内容 以查询我的 mongoosedb 我找不到太多这方面的信息 因此非常感谢您的帮
  • 未处理的拒绝:发送后无法设置标头

    我正在 Dialogflow 中创建一个聊天机器人 当我尝试将数据添加到数据库时 它抛出了 未处理的拒绝 错误 这是我的index js文件 use strict const functions require firebase funct
  • 从 Node.js 调用 execl、execle、execlp、execv、execvP 或 execvp 的方法

    POSIX 系统公开了一系列exec函数 允许人们将可能不同的东西加载到当前进程中 保留打开的文件描述符 进程标识符等 可以出于多种原因执行此操作 在我的情况下 这是引导 我想更改我自己的进程的命令行选项 然后在现有进程上重新加载它 这样就

随机推荐

  • Moment.js,转换纪元时日期时间无效

    我有以下代码将纪元时间转换为日期时间 var newDate moment unix 1525168800000 format MM DD YYYY alert newDate 当我检查时间戳时纪元转换器 https www epochco
  • 使用 XDocument 解析 XML

    我可以获得一些使用 XDocument 从以下 xml 解析 my cool id 的帮助吗
  • 改进PNG优化Gulp任务

    这是透明的 PNG 源代码 https i stack imgur com 6XZBB png https i stack imgur com 6XZBB png 13 3kB 使用 compresspng com 进行优化 https i
  • 从字符串sql server中删除数字

    我有一个大型数据库 我想在其中进行零件字符串搜索 用户将输入字符 JoeBloggs 为了争论 如果我有名字的话Joe 23 Blo Ggs 4在数据库中 我想删除名称中除 A Z 之外的所有内容 我有REPLACE Name 删除空格的函
  • Pandoc:[警告] 无法转换 TeX 数学

    我尝试使用 Pandoc 将 html 转换为 docx 这是我的 html 代码 p Example v 1 rm v 2 p 头中有 MathJax 配置 MathJax Hub Config extensions tex2jax js
  • 如何在 Oracle SQL Developer 中编辑 BLOB(包含 JSON)?

    如何在 Oracle SQL Developer 中编辑 BLOB 包含 JSON 文本 我可以打开并查看它们 但我需要外部编辑器来编辑它们吗 任何有关使用什么 即使只是记事本 以及如何进行操作的帮助都将在答案中得到极大的赞赏 编辑 有问题
  • 将 iTextSharp.text.Image 转换回 System.Drawing.Image

    我正在尝试将 iTextSharp text Image 类型的对象转换回 System Drawing Image 这是一段不起作用的代码 System Drawing Image img System Drawing Image Fro
  • STL 容器迭代器的模板专门化?

    我正在尝试编写一个类似于的模板函数std to string适用于基本类型以及 STL 容器的迭代器 但我不确定如何编写足够具体的模板来仅识别迭代器 到目前为止我尝试的是尝试使用iteratorSTL 容器中的 typedef templa
  • 未知权限 com.android.vending.BILLING

    我正在尝试在我的应用程序中设置应用内计费功能 到目前为止 我遵循了本指南 http developer android com training in app billing preparing iab app html http deve
  • 通过 Whatsapp 从我的 Android 上的应用程序共享 pdf 文件

    我尝试将 pdf 文件从我的应用程序发送到 Whatsapp 这是代码 但缺少一些东西 它打开了 Whatsapp 我可以选择一个联系人 但它说 共享失败 代码 String PLACEHOLDER file android asset Q
  • 从 gcc 的中间文件编译目标文件

    通过使用 fdump 树 flag 可以在源代码文件编译期间转储一些中间格式文件 我的问题是是否可以使用该中间文件作为 gcc 的输入来获取最终的目标文件 我问这个是因为我想向中间文件添加一些代码gimple 通过使用标志获得 fdump
  • 在 AWK 中将空白字段替换为零

    我希望使用 awk 将空白字段替换为零 但是当我使用 sed s 0 文件时 当我只想考虑丢失的数据时 我似乎会替换所有空格 由于某些空字段 使用 awk print NF 文件返回不同的字段号 即 9 4 input 590073920
  • Eclipse PDT + xdebug:单步执行损坏的代码

    我使用 PHP 5 6 2 和 xdebug 2 2 5 以及 Eclipse 4 4 1 和 PDT 3 3 1 我正在尝试在本地服务器 localhost 上设置调试器 xdebug 但有些东西似乎被破坏了 当我启动调试会话时 Ecli
  • t sql“select case”与“if ... else”以及有关“开始”的解释

    我对 t sql 的经验很少 我必须编写一个存储的 这是我存储的 USE myDatabase GO SET ANSI NULLS ON GO SET QUOTED IDENTIFIER ON GO CREATE PROCEDURE dbo
  • java中String类如何用构造函数初始化

    public String String original this value original value this hash original hash 我不明白原始数据是如何转换为字符数组的 如果我用不同的代码尝试它 它会抛出编译错
  • 在 C# 中实现 OPOS 设备

    对于与旧版 POS 应用程序的某些互操作 我想知道是否可以在 C 中实现虚假的 OPOS 设备 基本上我会实现一个假键盘 它接受网络请求并将按键传递给遗留应用程序 有谁知道这是否可能或在哪里可以获得文档 我认为 OPOS 只是调用由注册表项
  • 将多列粘贴在一起

    我在数据框中有一堆列 我想将它们粘贴在一起 用 分隔 如下所示 data lt data frame a 1 3 b c a b c c c d e f d c g h i i e a b c d 1 a d g 2 b e h 3 c f
  • 如何对 Django 数据库迁移进行单元测试?

    我们使用 django 迁移 django v1 7 更改了数据库 数据库中存在的数据不再有效 基本上我想通过在单元测试中构建预迁移数据库 添加一些数据 应用迁移来测试迁移 然后确认一切顺利 一个人如何 加载单元测试时阻止新的迁移 I fo
  • 没有 AVAsset 的纯色 AVMutableComposition

    这是我的最终目标 我想使用AVVideoCompositionCoreAnimationTool从 Core Animation 创建视频 我不会在此组合中使用现有的 AVAsset 我的问题是 我该如何使用AVMutableComposi
  • 猫鼬预保存和验证之间的区别?什么时候使用哪一个?

    目前我正在使用pre save 进行验证 UserSchema pre save true function next done var self this in case inside a callback var msg helper