Express 带有min函数的Joi验证问题

Express 带有min函数的Joi验证问题,express,joi,Express,Joi,我正在使用Joi在express.js中使用以下代码,并希望验证名称长度必须至少为3,不能为空,但至少不起作用,因此需要您的帮助 const Joi = require('@hapi/joi'); const express = require('express'); const app = express(); app.use(express.json()); //Define static array const courses = [ {id: 1, name:'course 1

我正在使用Joi在express.js中使用以下代码,并希望验证名称长度必须至少为3,不能为空,但至少不起作用,因此需要您的帮助

const Joi = require('@hapi/joi');
const express = require('express');

const app = express();

app.use(express.json());

//Define static array
const courses = [
  {id: 1, name:'course 1'},
  {id: 2, name:'course 2'},
  {id: 3, name:'course 3'},
];

app.get('/api/courses', (req, resp) => {
   resp.send(courses);
});

app.post('/api/courses', (req, resp) => {
   const schema = Joi.object({
     name: Joi.string()
           .max(3).required
           .messages({
               'string.max': 'Name should be max 3 characters..',
               'any.required': 'Name must not be empty...',
     }),
   }); 

   const { error } = schema.validate(req.body);

   if(error) {
     resp.status(400).json( {error: error.details[0].message});
     return;
   }
   const course = {
     id: courses.length + 1,
     name: req.body.name
   };

   courses.push(course);
   resp.send(course);
});
在您的问题中,您说过“名称长度必须至少为3”,但在您的模式中应用了max规则

此外,您还忘记在必填项后添加括号

您需要此架构具有“`min、空和必需的规则”

const schema=Joi.object({
名称:Joi.string()
.min(3)
.empty()
.required()
.留言({
“string.min:“`名称应为最小{限制}个字符..`,
“string.empty”:“名称不能是空字段”,
“any.required”:“需要名称”
})
});
案例1:无名称字段

请求:

{

}
{
  "name": ""
}
{
  "name": "AB"
}
答复:

{
    "error": "Name is required"
}
{
    "error": "Name cannot be an empty field"
}
{
    "error": "Name should be min 3 characters.."
}
案例2:名称为空

请求:

{

}
{
  "name": ""
}
{
  "name": "AB"
}
答复:

{
    "error": "Name is required"
}
{
    "error": "Name cannot be an empty field"
}
{
    "error": "Name should be min 3 characters.."
}
案例3:名称为2个字符

请求:

{

}
{
  "name": ""
}
{
  "name": "AB"
}
答复:

{
    "error": "Name is required"
}
{
    "error": "Name cannot be an empty field"
}
{
    "error": "Name should be min 3 characters.."
}
还要确保您正在发送请求正文,如以下原始JSON:

另外,请确保此
内容类型
标题的值为
application/json


抱歉,实际上我正在测试场景,所以复制了最后一个代码wtih max(),但是max和min都不起作用,让我试试你的建议。@user342944实际上我已经在express应用程序中尝试过这个模式,并用postman进行了测试。因此,如果您出现问题,请确保您的joi模式与答案中的完全相同。另外,如果答案有效,请不要忘了标记和投票。我已经做了建议的更改,但在所有情况下仍然需要获得名称是错误的。实际上,我复制粘贴了您的代码,但结果是name是必需的。@user342944我测试了此架构,您似乎犯了一个错误,您可以将您的帖子路径临时添加到您的问题中吗?还显示一个屏幕截图如何发送请求正文。duhhhh!!感谢它的工作…我忘了将内容类型设置为JSON…非常好的帮助suleyman。