Javascript 我应该总是在express中编译Ajv模式吗?
我想使用验证我的Javascript 我应该总是在express中编译Ajv模式吗?,javascript,node.js,express,ajv,Javascript,Node.js,Express,Ajv,我想使用验证我的express应用程序的请求正文 要使用验证器,我们首先需要编译要测试的模式,然后运行验证,如下所示: const Ajv=require('Ajv'); const ajv=新ajv(); 常量模式={ 类型:“对象”, 必需:[“用户名”,“密码”], 特性:{ 用户名:{ 键入:“字符串”, 最小长度:3, }, 密码:{ 键入:“字符串”, 最小长度:8, }, }, }; /*我们想要验证的是什么*/ 常数体={ 用户名:“johndoe”, 密码:“机密” }; /*
express
应用程序的请求正文
要使用验证器,我们首先需要编译要测试的模式,然后运行验证,如下所示:
const Ajv=require('Ajv');
const ajv=新ajv();
常量模式={
类型:“对象”,
必需:[“用户名”,“密码”],
特性:{
用户名:{
键入:“字符串”,
最小长度:3,
},
密码:{
键入:“字符串”,
最小长度:8,
},
},
};
/*我们想要验证的是什么*/
常数体={
用户名:“johndoe”,
密码:“机密”
};
/*我们编译验证器*/
const validate=ajv.compile(schema.query)
/*我们测试数据,看它是否有效*/
const valid=validate(正文)
我应该在调用端点时始终编译验证器,并将其包含在路由中,还是可以将编译过程留在路由正文之外?您应该在路由处理程序之外编译一次验证器,并在处理程序中重用已编译的模式
这将提高性能-您只需要在它发生更改时编译它。您应该在路由处理程序之外编译它一次,并在处理程序中重用编译后的架构
这将提高性能-您只需要在它发生变化时编译它。在尝试Josh Wulf的答案后,我确认它可以在路由处理程序之外编译验证器 尽管它按预期工作,并且可以在路由处理程序之外编译,但我注意到它有一个缺点 了解验证器检测到哪些错误的方法是调用
validate.errors
:
var validate=ajv.compile(模式);
var valid=验证(数据);
如果(!有效){
console.log(validate.errors);
}
因此,我们不应该在路由处理程序之外编译验证器,因为可能存在并发问题
由于验证程序在同一路由的不同请求中是相同的,访问验证程序的
errors
属性可能会返回另一个客户端的错误。在尝试Josh Wulf的答案后,我确认它可以在路由处理程序之外编译验证程序
尽管它按预期工作,并且可以在路由处理程序之外编译,但我注意到它有一个缺点
了解验证器检测到哪些错误的方法是调用validate.errors
:
var validate=ajv.compile(模式);
var valid=验证(数据);
如果(!有效){
console.log(validate.errors);
}
因此,我们不应该在路由处理程序之外编译验证器,因为可能存在并发问题
由于验证程序在同一路由的不同请求中是相同的,访问验证程序的
errors
属性可能会返回另一个客户端的错误。我是否可以将编译
放在同一个文件中,在路由处理程序的外部和前面?是的,您当然可以。尽管这可以提高性能,它有一个很大的并发问题。请查看我的答案以了解详细信息,我是否可以将编译
放在同一个文件中,在路由处理程序之外和之前?是的,您当然可以。虽然这可以提高性能,但它存在很大的并发问题。请查看我的答案以了解详细信息