我已经创建了一个验证器来验证下流数据到服务器,并检查数据是否存在于数据库
model.js
const mongoose = require('mongoose');
const User = new mongoose.Schema({
email:{
type:String,
unique:true,
required:true,
},
password:{
type:String,
required:true,
}
},{timestamps:true});
module.exports = mongoose.model('bbusers',User);
和验证器
const joi = require('joi');
const User = require('./model');
const UserModel = joi.object({
email:joi.string().email(),
password:joi.string().min(5)
});
module.exports = (res) => {
const {error, value} = UserModel.validate(res);
if(error){
return error;
}else{
User.countDocuments({email:res.email}).then(count => {
if(count > 0){
return 1;
}else{
return 0;
}
});
}
}
And a Last是用来调用函数的路由器
const router = require('express').Router();
const UserV = require('./UserV');
router.get('/register',async(req,res) => {
console.log(UserV(req.body))
});
. .当我使用非结构化电子邮件值进行查询时,我得到了一个错误,这是例外的,但每当我制作结构化电子邮件以检查电子邮件是否在数据库中而不是获得1或0时,我得到未定义
旋度——
curl --location --request GET 'localhost:3000/register'
--header 'Content-Type: application/json'
--data-raw '{
"email":"guptaanish450gmail.com",
"password":"adfdsdff"
}'
问题出在验证器上。如果你仔细看,它会是这样的,
module.exports = (res) => {
const {error, value} = UserModel.validate(res);
if(error){
return error;
}else{
User.countDocuments({email:res.email}).then(count => {
if(count > 0){
return 1;
}else{
return 0;
}
});
}
return; // The invisible return
}
当没有错误时,您将得到的是不可见返回的undefined
。当promise被解析时,你的函数已经完成了它的执行。
让验证器在两种情况下都返回一个承诺,并从路由器处理它。
const router = require('express').Router();
const UserV = require('./UserV');
router.get('/register',async(req,res) => {
try {
const count = await UserV(req.body);
console.log(count);
catch(error) {
console.log(error); // error case is here
}
});
和类似于
的验证器const joi = require('joi');
const User = require('./model');
const UserModel = joi.object({
email:joi.string().email(),
password:joi.string().min(5)
});
module.exports = (res) => {
const {error, value} = UserModel.validate(res);
if(error){
return Promise.reject(error);
}else{
return User.countDocuments({email:res.email}).then(count => {
if(count > 0){
return 1;
}else{
return 0;
}
});
}
}