2016-08-05 4 views
0

У меня есть сервер MongoDb, размещенный на Azure. Я теперь создаю Node.js API, предназначенный для извлечения данных из таблицы в одной из баз данных (т. Е. Таблицы: Word; database: MyDatabase). Я построил API после this tutorial, но я не смог успешно извлечь из него какие-либо данные ...Не удалось получить данные из MongoDb в Node.Js API

Я знаю, что сервер запущен и доступен, так как я могу подключиться к нему через tcp через:

psping [Azure's Public IP]:27017 

Теперь у меня есть Node.js API со следующим кодом: 1) приложение/server.js

var express = require('express');  // call express 
var app  = express();     // define our app using express 
var bodyParser = require('body-parser'); 
var mongoose = require('mongoose'); 
mongoose.connect('mongodb://[Azure's public IP]:27017/MyDatabase'); 
var Word = require('./models/word'); 

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

var port = process.env.PORT || 8080;  // set our port 

// ROUTES FOR API 
var router = express.Router();    // get an instance of the express Router 

// middleware to use for all requests 
router.use(function(req, res, next) { 
    // do logging 
    console.log('Something is happening.'); 
    next(); 
}); 

router.get('/', function(req, res) { 
    res.json({ message: 'hooray! welcome to our api!' }); 
}); 

router.route('/words') 

    .get(function(req, res) { 
     Word.find(function(err, words) { 
      if (err) 
       res.send(err); 

      res.json(words); 
     }); 
    }); 

// more routes for our API will happen here 

// REGISTER OUR ROUTES ------------------------------- 
// all of our routes will be prefixed with /api 
app.use('/api', router); 

// START THE SERVER 
// ============================================================================= 
app.listen(port); 
console.log('Magic happens on port ' + port); 

Я также написал модель для моей единственной таблицы в базе данных, который имеет 3 столбца: автогенератор ObjectId, испанский, французский (mea nt иметь слова на обоих языках, чтобы заставить его работать как переводчик). Модели выглядят следующим образом: 2) приложение/модель/word.js

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

var WordSchema = new Schema({ 
    spanish: String, 
    french: String 
}) 

var Word = mongoose.model('Word',WordSchema); 
module.exports = Word; 

Теперь, я иду к почтальону и GET на следующий: http://localhost:8080/api/words; который возвращает [].

На бревнах MongoDB я вижу следующее:

2016-08-05T03:16:26.520+0000 I NETWORK [conn60] end connection [Some IP]:[Some port] (1 connections now open) 
2016-08-05T03:31:11.878+0000 I NETWORK [initandlisten] connection accepted from [Some IP]:[Some port] #61 (1 connection now open) 
+0

Вы дважды проверяли наличие документов в вашей коллекции. Из результата видно, что нет. –

+0

Есть! Я вижу их, выполняя «использование MyDatabase» «db.word.find()« – Victor

+0

Я думаю, что нашел проблему. См. Мой ответ ниже. –

ответ

1

Как вы упомянули в своем комментарии, что документы были получены от db.word.find() Я думаю, что я нашел проблему. Вам необходимо поместить документы в коллекцию с именем words, а не word.

Mongoose будет использовать множественное число версии вашей модели. См. http://mongoosejs.com/docs/models.html для получения дополнительной информации.

1

Я думаю, что вам не хватает {} при выполнении находки.

router.route('/words') 

.get(function(req, res) { 
    Word.find({}, //Added here. 
     function(err, words) { 
     if (err) 
      res.send(err); 
     console.log(words) 
     res.json(words); 
    }); 
}); 

Надеюсь, это поможет.

EDIT: -

По Документу doc, функция поиска принимает первый параметр в качестве объекта и рассматривать его в качестве условий, но не является функцией обратного вызова.

+1

Согласно документу http://mongoosejs.com/docs/api.html#model_Model.find, функция find принимает первый параметр объекта и рассматривает его как «условия», но не функцию обратного вызова. @Victor, пожалуйста, попробуйте этот ответ и любое обновление, не стесняйтесь, дайте мне знать. –

+0

Обновлен мой ответ с информацией, предоставленной @Victor – Shrabanee

+0

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

Смежные вопросы