2017-01-29 1 views
0

В этом вопросе я считаю, что мои файлы config.js, model.js и server.js актуальны. Может ли кто-нибудь объяснить, почему это возвращает пустой массив с кодом 200 в почтальоне? В моей оболочке mongo я могу получить доступ и посмотреть коллекцию и файлы.Мой вызов node.js GET возвращает пустой массив из mongo .find()

Вот вызов GET, который я пытаюсь сделать в файле server.js. Ответ должен быть массивом моих файлов из импортированного 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}; 

конфигурационный файл, который импортируется бют в сопз {PORT, DATABASE_URL} команда выше:

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

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

и, наконец, выход я получаю на мой Почтальон (после ввода в GET локального хоста: 8080/пост) и ключ: значение постоянного типа: приложения/JSON в моем заголовка:

{ 
    "posts": [] 
} 
+0

.then (сообщений => { res.json ({ сообщений: posts.map ( (пост) => post.apiRepr()) });} ) я думаю, что проблема с этой частью код. попробуйте console.log() здесь и проверьте –

+0

спасибо, я сделал это. console.log (сообщения); также дает мне пустой массив [] – John

ответ

0

Не должно быть localhost: 8080/posts? На вашем маршруте есть/посты и ваше высказывание вашего сообщения/сообщения.

+0

Нет, это немного запутывает, потому что это приложение для блога. Поэтому я фактически собираю все сообщения в блоге. – John

0

Проблема была в этой части кода:

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

Мой дб в мангуст был назван по-другому, чем BlogPost, который я пытался, однако мангуст известен плюрализация и .toLowerCase() - Инж коллекции. Поэтому, если моя коллекция была BlogPost, она бы сработала, хотя за кулисами она использовала бы «blogposts».