Express / Mongoose сохраняет только частичные данные запроса в базу данных - PullRequest
0 голосов
/ 25 мая 2018

Я думаю, это связано с тем, как я определил свои схемы, но я не могу найти, где ошибка ... У меня есть почти идентичный файл, который работает отлично, и я, к сожалению, не былудалось найти дубликат этой проблемы в любом месте.

При отправке запроса 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})
});

1 Ответ

0 голосов
/ 25 мая 2018

ОК. Итак, детально изучив мой код, я выяснил, в чем я ошибался, и исправил проблему, однако в процессе поиска я нашел очень мало способов получения результатов.Я довольно новичок в Express, поэтому я собираюсь обрисовать причину проблемы и то, как я решил ее, чтобы потенциально сэкономить кому-то еще кучу времени, если они совершат ту же самую глупую ошибку.

Теперь проблема возникла из-за того, как я получал данные и обслуживал их в ответ на запросы.В качестве примера, вот мой маршрут GET для перечисления всех объектов.

Я полностью сосредоточился на пост-запросе и предположил, что это проблема с базой данных.Оказывается, что я на самом деле сделал, чтобы мои схемы и маршруты были менее запутанными, я изменил имена соответствующих переменных.Однако я забыл обновить эту строку в моем GET-маршруте, чтобы отразить изменение:

  Post.find({}, 'postTitle postContent isPublished', function (error, posts) {

, которое я оставил как:

  Post.find({}, 'title content published', function (error, posts) {

Причинаиногда отображается заголовок: я пытался отменить изменения назад и вперед, чтобы выявить проблему.

Я знаю, что это супер базовый запрос, но я застрял в нем большую часть дня, и единственный другойсоответствующая дискуссия об этом закончилась тем, что ОП сказал, что он волшебным образом исправился.

...