提问者:小点点

TypeError:尝试验证JSON请求时,schema.validate不是函数


我是一个初学者,目前正在学习Node.js API身份验证教程。 一切都很顺利,直到必须将代码重构到单独的文件中,而现在,当通过邮递员发送JSON请求时,不管请求是否应该通过验证,我总是收到以下错误“TypeError:schema.validate is not a function”(类型错误: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。

非常感谢


共1个答案

匿名用户

使用以下方法进行验证,因为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)