Express 带有min函数的Joi验证问题
我正在使用Joi在express.js中使用以下代码,并希望验证名称长度必须至少为3,不能为空,但至少不起作用,因此需要您的帮助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
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。