тело запроса не определено, ошибка проверки мангуста во вложенных свойствах

#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 }))