我的node.js GET调用从mongo返回一个空数组.find()

时间:2017-01-29 00:48:30

标签: javascript arrays node.js mongodb postman

在这个问题中,我相信我的config.js,model.js和server.js文件是相关的。任何人都可以解释为什么这会在邮递员中返回一个代码为200的空数组?在我的mongo shell中,我可以访问并查看集合和文件。

这是我试图在server.js文件中进行的GET调用。响应应该是我导入的mongo db中的文件数组。

const {PORT, DATABASE_URL} = require('./config');
const {BlogPost} = require('./models');

app.get('/posts', (req, res) => {
  BlogPost
    .find()
    .exec()
    .then(posts => {
        res.json({
          posts: posts.map(
            (post) => post.apiRepr())
        });
    })
    .catch(
      err => {
        console.error(err);
        res.status(500).json({message: 'Internal server error'});
    });
});

创建和导出BlogPost模式并将其导出的模型文件是:

const blogPostSchema = mongoose.Schema({
  title: {type: String, required: true},
  content: {type: String, required: true},
  author: {
    firstName: {type: String, required: true},
    lastName: {type: String, required: true}
  }
});
blogPostSchema.virtual('authorString').get(function() {
  return `${this.author.firstName} ${this.author.lastName}`.trim()});

blogPostSchema.methods.apiRepr = function() {

  return {
    id: this._id,
    title: this.title,
    author: this.authorString,
    content: this.content
  }
};

const BlogPost = mongoose.model('BlogPost', blogPostSchema);
module.exports = {BlogPost};

上面的const {PORT,DATABASE_URL}命令导入的配置文件是:

exports.DATABASE_URL = process.env.DATABASE_URL ||
                       global.DATABASE_URL ||
                      'mongodb://localhost/mongoose-blog';

exports.PORT = process.env.PORT || 8080;

最后,我在Postman上的输出(在放入GET localhost:8080 / post之后)和key:constant-type value:我的标题中的application / json是:

{
  "posts": []
}

2 个答案:

答案 0 :(得分:1)

问题在于这部分代码:

const BlogPost = mongoose.model('BlogPost', blogPostSchema);
module.exports = {BlogPost};

我在mongoose中的数据库被命名为BlogPost之外的其他东西,我曾尝试过,但是mongoose以复数和.toLowerCase()为集合而闻名。因此,如果我的收藏品是BlogPost,即使在幕后它会使用" blogposts"它也会有效。

答案 1 :(得分:0)

不应该是localhost:8080 /帖子?你的获取路线有/帖子和你说你的推杆/帖子。