2016-08-05 17 views
0

Ich habe einen MongoDb-Server auf Azure gehostet. Ich baue nun eine Node.js-API, die dazu dient, Daten aus einer Tabelle in einer der Datenbanken (d. H. Tabelle: Word; Datenbank: MeineDatenbank) abzurufen. Ich habe die API nach this tutorial gebaut, aber ich kann nicht erfolgreich Daten davon abrufen ...Fehler beim Abrufen von Daten von MongoDb auf Node.Js-API

Ich weiß, dass der Server läuft und auch erreichbar, da ich tcp-Verbindung zu ihm durch:

Jetzt
psping [Azure's Public IP]:27017 

, ich habe eine node.js api mit dem folgenden Code: 1) app/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); 

ich habe auch ein Modell für meine einzige Tabelle in der Datenbank geschrieben, Das hat 3 Spalten: die automatisch generierte ObjectId, Spanisch, Französisch (mea keine Wörter in beiden Sprachen haben, damit es als Übersetzer funktioniert). Die Modelle wie folgt aussieht: 2) app/models/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; 

Nun gehe ich auf Postbote und GET auf der folgenden: http://localhost:8080/api/words; Das gibt [] zurück.

Auf MongoDB logs Ich sehe die folgenden:

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

Haben Sie überprüft, ob Dokumente in Ihrer Sammlung vorhanden sind? Aus dem Ergebnis sieht es so aus, als gäbe es keine. –

+0

Es gibt! Ich kann sie sehen, indem Sie "MyDatabase verwenden" "db.word.find()" – Victor

+0

Ich denke, ich habe das Problem gefunden. Siehe meine Antwort unten. –

Antwort

1

Wie Sie in Ihrem Kommentar erwähnt, dass die Dokumente von db.word.find() abgerufen wurden, denke ich, dass ich das Problem gefunden habe. Sie müssen Dokumente in die Sammlung words statt word einfügen.

Mungo verwendet die Plural Version Ihres Modellnamens. Weitere Informationen finden Sie unter http://mongoosejs.com/docs/models.html.

1

Ich glaube, Sie {} fehlen, wenn Fund zu tun.

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

Hoffe, das wird helfen.

EDIT: -

das Dokument von doc Nach der Suchfunktion der ersten Parameter als Objekt übernehmen und sie als Bedingungen behandeln, nicht aber eine Callback-Funktion.

+1

Gemäß dem Dokument von http://mongoosejs.com/docs/api.html#model_Model.find akzeptiert die Funktion find den ersten Parameter eines Objekts und behandelt es als 'conditions', aber nicht als Callback-Funktion. @Victor Bitte versuchen Sie diese Antwort und jedes Update, zögern Sie nicht mich zu informieren. –

+0

Aktualisiert meine Antwort mit den Informationen von @Victor – Shrabanee

+0

Es gibt immer noch [] ... Ich weiß, dass die VM ausgeführt wird und die Datenbank scheint in Ordnung. Also werde ich versuchen, einem anderen Tutorial zu folgen, um die Rest-API zu erstellen – Victor

Verwandte Themen