2016-01-29 2 views
1

Приносим извинения, если это не соответствует стандартным стандартам, но, пожалуйста, обратите внимание, что я старался изо всех сил.Получение пустого ответа, возвращенного с узлаJS + Express

У меня возникли проблемы, возвращающиеся ответ JSON в моем API, который захватывает содержимое из экземпляра MongoDB

В принципе у меня есть следующий файл, который обрабатывает сервер nodejs (server.js):

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var mongoose = require('mongoose'); 
var Person = require('./models/people'); 

mongoose.connect('mongodb://localhost/testdb'); 

app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 

var port = process.env.PORT || 8080; 
var router = express.Router(); 

router.use(function (req,res,next) { 
    console.log('something going on'); 
    next(); 
}) 

router.get('/', function (req,res) { 
    res.status(500).json({ 
     error: 'unauthorized' 
    }); 
}); 

router.route('/getPeople').get(function (req,res){ 
    Person.find(function (err,people) { 
     console.log('err: ' , err); 
     console.log('people: ' , people); 
     if (err) 
      res.send(err) 
     res.json(people); 
    }) 
}) 

app.use('/api',router); 

app.listen(port); 
console.log('server started on port : ' , port); 

модель выглядит следующим образом (people.js):

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var PeopleSchema = new Schema({ 
    name: String, 
    surname: String 
}); 

module.exports = mongoose.model('Person',PeopleSchema) 

Мой DB правильно заполнена значением, и если я к нему доступ с помощью Монго оболочки (db.People.find()) Я получаю правильный результат. Вместо этого, используя код, он не работает.

+0

Что показывает ваш выход? – Neil

+0

Он показывает только «[]». –

+0

Я имею в виду ваш консольный журнал. Вы видите людей: []? – Neil

ответ

1

Необходимо указать условие или критерий поиска в методе find(), которого нет в вашем коде. Вы включили функцию обратного вызова. Попробуйте переписывания метод маршрутизации и изменение названия модели, чтобы отразить имя базы данных, как:

people.js («./models/people»):

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var PeopleSchema = new Schema({ 
    name: String, 
    surname: String 
}); 
module.exports = mongoose.model('People', PeopleSchema); 

или вы должны желать, чтобы сохранить название модели, как человек, вы можете передать CollectionName в качестве третьего аргумента в аргументах функции в model():

module.exports = mongoose.model('Person', PeopleSchema, 'People'); 

или как свойство в определении схемы:

var PeopleSchema = new Schema({ 
    name: String, 
    surname: String 
}, { collection: 'People' }); 

module.exports = mongoose.model('Person', PeopleSchema); 

сервер (server.js):

/* if using the renamed People model */ 
router.route('/getPeople').get(function (req,res){ 
    People.find({}, function (err, people) { 
     console.log('err: ' , err); 
     console.log('people: ' , people); 
     if (err) 
      res.send(err) 
     res.json(people); 
    }); 
}); 

или с помощью выполнения запроса:

/* if using the renamed People model */ 
router.route('/getPeople').get(function (req,res){ 
    People.find().exec(function (err, people) { 
     console.log('err: ' , err); 
     console.log('people: ' , people); 
     if (err) 
      res.send(err) 
     res.json(people); 
    }); 
}); 
+0

Я пробовал оба метода, и он по-прежнему возвращает пустой массив ("[]"). По результатам запроса через монго: > db.People.find() {"_id": ObjectId ("56ab23e9549c1fa6720e6b24"), "name": "Luca", "surname": "Digiusto"} > –

+0

Попробуйте изменить название модели или передать имя коллекции в качестве третьего аргумента в соответствии с мое обновление выше. – chridam

+0

Добавление значения CollectionName в качестве третьего параметра сделало трюк. Но я не уверен, что понимаю, почему. Вы знаете, что это может быть? Обратите внимание, что я следовал этому руководству -> https://scotch.io/tutorials/build-a-restful-api-using-node-and-express-4 –

0

Не могли бы вы попробовать

Person.find() 
    .exec(function (err, people) { 
     console.log('err: ' , err); 
     console.log('people: ' , people); 
     if (err) 
      res.send(err) 
     res.json(people); 
    }) 

Эта musst работа если нет, то e rror не в вашем маршруте. // Редактирование да в вашей находке отсутствует условие, в котором вы прошли обратный вызов в состоянии.

Person.find({},function (err,people) { 
Смежные вопросы