Я думаю, это связано с тем, как я определил свои схемы, но я не могу найти, где ошибка ... У меня есть почти идентичный файл, который работает отлично, и я, к сожалению, не былудалось найти дубликат этой проблемы в любом месте.
При отправке запроса API в мой локальный экземпляр Express через Postman в базе данных сохраняется только значение тела запроса 'title'.Я отправляю следующий простой запрос на мой маршрут как Application / Json (хотя при использовании x-www-form-urlencoded это происходит так же):
{
"postTitle": "title goes here",
"postContent": "body goes here",
"isPublished": true
}
Это явно регистрируется в экспрессе, как если бы яЗаписать объект, в котором я вижу эти данные (плюс отметки времени и _id):
{ _id: 5b07d9c0b8124e0599079c04,
postTitle: 'title goes here',
postContent: 'body goes here',
isPublished: true,
createdAt: 2018-05-25T09:39:12.869Z,
updatedAt: 2018-05-25T09:39:12.869Z,
__v: 0 }
Однако, когда я отправляю запрос на получение маршрута к этому объекту с использованием его идентификатора, я получаю в ответ следующее:
{ "_id": "5b07d9c0b8124e0599079c04" }
Аналогично, если я отправляю запрос на перечисление всех объектов, я получаю следующий ответ:
{
"posts": [
{
"_id": "5b07d9c0b8124e0599079c04"
},
{
"_id": "5b07d9c0b8124e0599079c03"
},
{
"_id": "5b07d9914f10ce058f137eba"
}
]
}
Странно, иногда включается заголовок сообщения, отправляемый как часть ответа.в ответ, а иногда и нет.
Моя схема выглядит следующим образом:
var postSchema = new Schema({
postTitle: String,
postContent: String,
isPublished: Boolean
},
{
timestamps: true
});
Мой маршрут API post для запросов POST выглядит следующим образом:
router.post('/posts', (req, res, next) => {
var postTitle = req.body.postTitle;
var postContent = req.body.postContent;
var isPublished = req.body.isPublished;
var newPost = new Post({
postTitle: postTitle,
postContent: postContent,
isPublished: isPublished
});
newPost.save(function (error) {
if (error) {
console.log(error)
}
res.send({
success: true,
message: 'Post saved successfully!'
})
})
});
(Если вы не используете Router, у вас будет 'app.post' вместо 'router.post') Опять же, это немного длинновато, но все работает нормально.
Мой маршрут GETследующим образом:
router.get('/posts', (req, res) => {
Post.find({}, 'title content published', function (error, posts) {
if (error) { console.error(error); }
res.send({
posts: posts
})
}).sort({_id:-1})
});