Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 验证在猫鼬中的工作原理_Javascript_Node.js_Mongoose - Fatal编程技术网

Javascript 验证在猫鼬中的工作原理

Javascript 验证在猫鼬中的工作原理,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,我在读猫鼬的文献: 据说在将文档保存到数据库之前会进行验证 要关闭此功能,我们必须将选项:validateBeforeSave设置为false 然而,我有另一个像样的Node.js教程示例,他们只是在其中使用。验证如下: var course = new Course({}); course.validate(function(err) { assert.ok(err); assert.equal(err.errors['title'].

我在读猫鼬的文献:

据说在将文档保存到数据库之前会进行验证

要关闭此功能,我们必须将选项:validateBeforeSave设置为false

然而,我有另一个像样的Node.js教程示例,他们只是在其中使用。验证如下:

      var course = new Course({});

      course.validate(function(err) {
        assert.ok(err);
        assert.equal(err.errors['title'].kind, 'required');

        course.title = 'Introduction to Computer Science';
        assert.equal(course.title, 'Introduction to Computer Science');

        var s = '0123456789';
        course.title = '';
        while (course.title.length < 150) {
          course.title += s;
        }

        course.validate(function(err) {
          assert.ok(err);
          assert.equal(err.errors['title'].kind, 'maxlength');

          ++succeeded;
          done();
        });
      });
var课程=新课程({});
课程。验证(功能(错误){
assert.ok(err);
assert.equal(err.errors['title'].kind,'required');
课程名称=‘计算机科学导论’;
assert.equal(课程名称“计算机科学导论”);
var s='0123456789';
课程名称=“”;
while(course.title.length<150){
课程名称+=s;
}
课程。验证(功能(错误){
assert.ok(err);
assert.equal(err.errors['title'].kind,'maxlength');
++成功;
完成();
});
});

我无法理解在未将validatebeforeave选项设置为false的情况下使用validate的根本原因?有人能解释一下上面提供的代码是如何工作的吗?

validateBeforeSave,顾名思义,在将mongoose对象持久化到数据库之前验证它。这是一个模式级检查,如果未设置为false,将验证每个文档。它既包括内置验证(如数字不能包含字符串,或者必须存在必填字段等),也包括自定义定义的验证

validate
执行相同的操作,只是它与以后保存文档无关。它是您调用的对象上的方法,如
course.validate(callback)
,并通过回调中的错误来了解对象是否有效

两者都在做同一件事,但时间不同,层次不同。而且,两者并不相互排斥,因此,一方不需要为另一方工作而相互抵消


至于
validate
的用例,单元测试就是一个例子。您可能希望测试验证器而不必模拟
save
或设置测试数据库。我相信这个示例正在尝试这样做,尽管不是以结构化的方式。

validateBeforeSave,顾名思义,在将mongoose对象持久化到数据库之前验证它。这是一个模式级检查,如果未设置为false,将验证每个文档。它既包括内置验证(如数字不能包含字符串,或者必须存在必填字段等),也包括自定义定义的验证

validate
执行相同的操作,只是它与以后保存文档无关。它是您调用的对象上的方法,如
course.validate(callback)
,并通过回调中的错误来了解对象是否有效

两者都在做同一件事,但时间不同,层次不同。而且,两者并不相互排斥,因此,一方不需要为另一方工作而相互抵消


至于
validate
的用例,单元测试就是一个例子。您可能希望测试验证器而不必模拟
save
或设置测试数据库。我相信这个示例正在尝试这样做,尽管不是以结构化的方式。

正如您所说,mongoose正在启动保存操作之前的验证,但在某些情况下,您希望在不保存的情况下验证文档架构。为此,您可以直接使用validate方法。 教程中的示例向我们展示了一段表示单元测试的代码。例如,我们可以检查生成要保存的模型的方法,而不保存他。
当您有许多保存和依赖项的复杂操作流时,验证方法也会有所帮助。例如,您想用适当的结构保存用户仪表板模型,但首先要保存用户配置文件。使用validate方法,例如错误的仪表板结构,您可以在保存用户配置文件之前检查请求并引发异常。

正如您所说,mongoose在保存操作之前会启动验证,但在某些情况下,您希望在不保存的情况下验证文档架构。为此,您可以直接使用validate方法。 教程中的示例向我们展示了一段表示单元测试的代码。例如,我们可以检查生成要保存的模型的方法,而不保存他。
当您有许多保存和依赖项的复杂操作流时,验证方法也会有所帮助。例如,您想用适当的结构保存用户仪表板模型,但首先要保存用户配置文件。使用validate方法,例如使用错误的仪表板结构,您可以在保存用户配置文件之前检查请求并引发异常。

在示例代码中,他们使用的是异步自定义验证器,如果您选中此项,您会更好地理解:


当标准验证还不够时使用它们,这纯粹是我的观察,它们通常与一些测试框架和评估库一起用于测试。

在示例代码中,它们使用的是异步自定义验证器,如果您选中此项,您会更好地理解:


当标准验证还不够时使用它们,这纯粹是我的观察,它们通常与一些测试框架和评估库一起用于测试。

谢谢,很容易在文档中丢失异步自定义验证程序部分显然是错误和误导的。代码甚至没有使用自定义验证器,更不用说异步验证器了。测试的两个验证是
必需的
最小长度
,它们是mongoose内置的,绝对不是异步的。@TalhaAwan请参阅您共享的文档中为自己提供的文档和示例代码,请参阅“内置验证程序”部分。你会被解雇的