TypeError: schema.validate is not a function when attempting to validate a JSON request
TypeError: schema.validate is not a function when attempting to validate a JSON request
我是初学者,目前正在学习 node.js API 身份验证教程。一切顺利,直到不得不将代码重构到单独的文件中,现在我在通过 Postman 发送 JSON 请求时不断收到以下错误“TypeError: schema.validate is not a function”,无论请求是否应该失败验证与否。
这是我的 validation.js
代码
//Validation
const Joi = require('@hapi/joi');
//Register Validation - wrap it in a function as there will be multiple schemas
const registerValidation = data => {
const schema = {
name: Joi.string().min(6).required(),
email: Joi.string().min(6).required().email(),
password: Joi.string().min(6).required()
}
return Joi.assert(data, schema);
}
// Login Validation
const loginValidation = data => {
const schema = {
email: Joi.string().min(6).required().email(),
password: Joi.string().min(6).required()
}
return Joi.assert(data, schema);
}
module.exports.registerValidation = registerValidation;
module.exports.loginValidation = loginValidation;
我的auth.js代码是这样
const router = require('express').Router();
const User = require('../model/User');
const { registerValidation } = require('../validation');
router.post('/register', async (req, res) => {
//Validate data before creating user
// const { error } = schema.validate(req.body);
const { error } = registerValidation(req.body);
if(error) return res.status(400).send(error.details[0].message);
const user = new User({
name: req.body.name,
email: req.body.email,
password: req.body.password,
date: req.body.date
});
try {
const savedUser = await user.save();
res.send(savedUser);
}catch(err){
res.status(400).send(err);
}
});
router.post('/login')
module.exports = router;
有人可以帮忙吗?我唯一改变的是我使用的 Joi.validate 根据文档不再有效所以我将其更新为 Joi.assert.
非常感谢
使用以下方法进行验证,因为 joi.validate 不再受支持
const schema = Joi.object({
name: Joi.string().min(6).required(),
email: Joi.string().min(6).required().email(),
password: Joi.string().min(6).required()
})
return schema.validate(data)
对于仍然收到“schema.validate 不是函数”的任何人:
当您声明架构时,请务必声明 Joi.object,如下所示:
const schema = Joi.object({
username: Joi.string().etc
})
这样声明
const schema = Joi.object({username: Joi.string().etc })
这东西有用!!
通常你是这样声明的:-
const schema = {username: Joi.string().etc }
而不是像那样声明
const schema = Joi.object({username: Joi.string().etc })
注意:在17.0.0以上版本中,没有Joi.validate功能,所以上面的东西你必须使用schema.validate(req.body)
它会起作用。
我是初学者,目前正在学习 node.js API 身份验证教程。一切顺利,直到不得不将代码重构到单独的文件中,现在我在通过 Postman 发送 JSON 请求时不断收到以下错误“TypeError: schema.validate is not a function”,无论请求是否应该失败验证与否。
这是我的 validation.js
代码//Validation
const Joi = require('@hapi/joi');
//Register Validation - wrap it in a function as there will be multiple schemas
const registerValidation = data => {
const schema = {
name: Joi.string().min(6).required(),
email: Joi.string().min(6).required().email(),
password: Joi.string().min(6).required()
}
return Joi.assert(data, schema);
}
// Login Validation
const loginValidation = data => {
const schema = {
email: Joi.string().min(6).required().email(),
password: Joi.string().min(6).required()
}
return Joi.assert(data, schema);
}
module.exports.registerValidation = registerValidation;
module.exports.loginValidation = loginValidation;
我的auth.js代码是这样
const router = require('express').Router();
const User = require('../model/User');
const { registerValidation } = require('../validation');
router.post('/register', async (req, res) => {
//Validate data before creating user
// const { error } = schema.validate(req.body);
const { error } = registerValidation(req.body);
if(error) return res.status(400).send(error.details[0].message);
const user = new User({
name: req.body.name,
email: req.body.email,
password: req.body.password,
date: req.body.date
});
try {
const savedUser = await user.save();
res.send(savedUser);
}catch(err){
res.status(400).send(err);
}
});
router.post('/login')
module.exports = router;
有人可以帮忙吗?我唯一改变的是我使用的 Joi.validate 根据文档不再有效所以我将其更新为 Joi.assert.
非常感谢
使用以下方法进行验证,因为 joi.validate 不再受支持
const schema = Joi.object({
name: Joi.string().min(6).required(),
email: Joi.string().min(6).required().email(),
password: Joi.string().min(6).required()
})
return schema.validate(data)
对于仍然收到“schema.validate 不是函数”的任何人:
当您声明架构时,请务必声明 Joi.object,如下所示:
const schema = Joi.object({
username: Joi.string().etc
})
这样声明
const schema = Joi.object({username: Joi.string().etc })
这东西有用!!
通常你是这样声明的:-
const schema = {username: Joi.string().etc }
而不是像那样声明
const schema = Joi.object({username: Joi.string().etc })
注意:在17.0.0以上版本中,没有Joi.validate功能,所以上面的东西你必须使用schema.validate(req.body)
它会起作用。