#node.js #express #validation #mongoose #post
Вопрос:
Я работаю над nodejs/express/мангустом
Моя модель:
const TodoSchema = new mongoose.Schema({ name: { type: String, required: ['Name is required'] }, },
});
Контроллер :
async function createTask(req, res) { try { const task = new Todo({ name: req.body }); console.log(req); console.log('Name check: ', req.name); const result = await task.save(); console.log('check: ', task, result); // res.send('Task created: ', result); res.json({ msg: 'Task created', item: result }); } catch (error) { console.log('Task creation error:', error); return res.json({ msg: error, }); }
}
Мой ответ в «почтальоне»:
"msg": { "errors": { "name": { "name": "ValidatorError", "message": "Name is required", "properties": { "message": "Name is required", "type": "required", "path": "name" }, "kind": "required", "path": "name" } }, "_message": "Todo validation failed", "name": "ValidationError", "message": "Todo validation failed: name: Name is required" }
}
и для моих журналов, req.name не определено, и req.тело.
Я видел документы для проверки мангуста и ключевое слово type и попробовал рекомендации, но ничего не помогло. Что случилось с моей конечной точкой поста?
Комментарии:
1. Не могли бы Вы добавить весь код во все файлы, пожалуйста?
2. трудно сказать, но задан ли у вас тип содержимого в заголовках запроса?
3. Решил ли какой-либо из ответов вашу проблему?
Ответ №1:
У вас есть ошибка при использовании required
в Вашей схеме мангуста, Вы пропускаете true
аргумент. Вот мой пример =gt;
const mongoose = require("mongoose"); const TaskSchema = new mongoose.Schema({ name: { type: String, required: [true, "You Must Provide name"], trim: true, maxlength: [23, "Maximum twenty characters"], minlength: [5, "Minimum four characters"], } }); module.exports = mongoose.model("Task", TaskSchema);
Ответ №2:
Может быть, вы просто не добавляете промежуточные программы для выражения.
app.use(express.json()); app.use(express.urlencoded({ extended: false }))