Express / Mongoose仅将部分请求数据保存到数据库

时间:2018-05-25 09:55:28

标签: javascript api express mongoose missing-data

我认为这与我如何定义我的模式有关,但我似乎无法找到bug的位置......我有一个几乎相同的文件设置,它工作得很好,我很遗憾没有能够在任何地方找到这个问题的副本。

通过Postman向本地Express实例发送API请求时,只有'title'请求正文值存储在数据库中。我将以下简单请求发送到我的路径作为Application / Json(在使用x-www-form-urlencoded时也会发生同样的事情):

{
    "postTitle": "title goes here",
    "postContent": "body goes here",
    "isPublished": true
}

这显然是在express中注册的,好像我记录了对象,我可以看到这些数据(加上时间戳和_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向此对象发送get请求时,我收到以下内容作为回应:

{ "_id": "5b07d9c0b8124e0599079c04" }

同样,如果我发送一个列出所有对象的请求,我会收到以下回复:

{
    "posts": [
        {
            "_id": "5b07d9c0b8124e0599079c04"
        },
        {
            "_id": "5b07d9c0b8124e0599079c03"
        },
        {
            "_id": "5b07d9914f10ce058f137eba"
        }
    ]
}

奇怪的是,有时作为回复的一部分发送的帖子标题包含在回复中,有时则不包括在内。

我的架构如下:

var postSchema = new Schema({
  postTitle: String,
  postContent: String,
  isPublished: Boolean
},
{
  timestamps: true
});

我发布POST请求的API路由如下:

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!'
    })
  })
});

(如果你没有使用路由器,你将有'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 :(得分:0)

好的 - 所以,通过仔细查看我的代码我已经弄清楚我出错的地方并解决了问题,然而,在我的搜索中,我发现结果的方式很少。我是Express的新手,所以我将概述问题的原因以及我如何解决它,以便在他们犯同样的愚蠢错误的情况下为其他人节省大量时间。

现在,我遇到的问题是我检索数据并提供数据以响应获取请求的结果。举个例子,这是我列出所有对象的GET路线。

我完全关注帖子请求并假设它是数据库的问题。事实证明我实际做了什么,是为了让我的模式和路线更加混乱,我改变了相关变量的名称。然而,我忘记做的是在我的GET路线中更新这一行以反映变化:

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

我将其留作:

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

标题有时显示的原因是我尝试来回撤消更改来发现问题。

我知道这是一个超级基本的查询,但我在一天中最好的时候都被困在这个问题上,关于这一点的唯一其他相关讨论以OP结束说它神奇地修复了自己。