Я пытаюсь создать простой блог со стеком MEAN, и в настоящее время я настраиваю задний конец. Я тестирую свои маршруты с помощью Postman, и по какой-то причине я не могу сохранить заголовок и тело сообщения в БД.
Моя модель: models/posts/db.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var PostSchema = new Schema ({
title: { type: String },
body: { type: String },
date: { type: Date, default: Date.now }
});
module.exports = mongoose.model('Post', PostSchema);
Мой контроллер: controllers/posts.index.js
var base = process.env.PWD;
var Post = require(base + '/models/posts/db.js')
var createPost = function(req, res) {
var post = new Post(req.body)
post.save(function(err, post) {
if(err) { res.sendStatus(500, err); }
res.json(post);
})
}
var getPosts = function(req, res) {
Post.find(function(err, posts) {
if (err) { res.sendStatus(500, err); }
res.json(posts);
})
};
module.exports = {
createPost,
getPosts
}
И вот мои основные маршруты в routes/index.js
router.get('/posts', posts.getPosts);
router.post('/posts/create', posts.createPost);
module.exports = router;
И мой главный сервер использует конечную точку /api
:
'app.use('/api', routes);'
Поэтому в Postman, когда я отправляю запрос POST в /api/posts/create
с сообщением, содержащим заголовок и тело, сохраняется пустое сообщение. Я получаю нечто подобное:
{
"__v": 0,
"_id": "5a29de91521f168eb9e1bcf2",
"date": "2017-12-08T00:36:33.280Z"
}
Любая помощь будет оценена по достоинству.
Я понял, 2 проблемы:
Важным является порядок размещения body-parser
, я написал строку после установки маршрутов, чтобы он не разбирал ничего.
Похоже, что Post
не может получить тело вашего фактического поста. Вы можете заполнить свойство body
по вашему запросу модулем body-parser
. Сделайте npm install body-parser
и добавьте это в свой код:
const bodyParser = require('body-parser')
app.use(bodyParser.json())
console.log(req.body)
в верхней части пост-контроллера?undefined
. Похоже, в req.body ничего нет, когда я отправляю запрос на публикацию. Я надеюсь, что я толкаю это правильно в Почтальон :