【问题标题】:TypeError: schema.validate is not a function when attempting to validate a JSON requestTypeError:尝试验证 JSON 请求时,schema.validate 不是函数
【发布时间】:2020-11-15 04:28:03
【问题描述】:

我是一名初学者,目前正在学习 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 无效?
  • 我想我是在 GitHub 上读到的,其中提到了版本 16 的文档。我得到“joi.validate is not a function”

标签: javascript node.js express joi


【解决方案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)

【讨论】:

  • 太棒了,谢谢@Deekshith Hegde。它现在正在工作:)
  • 太棒了!对答案的支持将不胜感激。
  • 完成了,虽然我的声望
【解决方案2】:

对于仍然得到“schema.validate 不是函数”的任何人:

声明架构时,请确保声明 Joi.object,如下所示:

const schema = Joi.object({
   username: Joi.string().etc
})

【讨论】:

  • 谢谢!这种变化很容易被忽略,应该以某种方式加粗。
猜你喜欢
  • 2019-06-22
  • 1970-01-01
  • 2023-01-21
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 2021-01-01
  • 2015-11-04
  • 1970-01-01
相关资源
最近更新 更多