Ich bin neu in mongodb und Hapi.js. Ich versuche, eine API für Leseanforderungen zu erstellen, bin mir aber nicht sicher, wie ich die Handler-Methode in server.route schreiben soll.mongodh + hapi.js: Sammlung ist nicht definiert?
Hier ist, wie ich meinen mongoclient mit hapi konfiguriert haben:
'use strict';
var MongoClient = require('mongodb').MongoClient; //using version 3.x
var Hapi = require('hapi');//using v16
var url = 'mongodb://****:****@ds131687.mlab.com:31687/learning_mongo';
var db;
var server = new Hapi.Server();
server.connection({
port:8080
});
server.route([
// Get tour list
{
method: 'GET',
path: '/api/tours',
handler: function(request, reply){
collection.find().toArray(function(err,tours){
reply(tours);
});
}
},
// Home page
{
method: 'GET',
path: '/',
handler: function(request, reply) {
reply("Hello world from Hapi/Mongo example.");
}
}
]);
var tours = function(db, callback) {
var collection = db.collection('tours');
collection.find().toArray(function(err, docs){
console.log(docs);
callback;
});
};
MongoClient.connect(url, function(err,client) {
server.start(function(err) {
tours(client.db('learning_mongo'), function(){
console.log('Hapi is listening to http://localhost:8080');
client.close();
});
});//end server
})
auf die Homepage Weg gehen funktioniert gut, aber wenn ich gehe Weg ./api/tours, ich erhalten den folgenden Fehler in Terminal:
Debug: internal, implementation, error
ReferenceError: Uncaught error: collection is not defined
at handler (/home/ubuntu/workspace/index.js:22:13)
at Object.internals.handler (/home/ubuntu/workspace/node_modules/hapi/lib/handler.js:101:51)
at request._protect.run (/home/ubuntu/workspace/node_modules/hapi/lib/handler.js:32:23)
at module.exports.internals.Protect.internals.Protect.run (/home/ubuntu/workspace/node_modules/hapi/lib/protect.js:60:12)
at exports.execute (/home/ubuntu/workspace/node_modules/hapi/lib/handler.js:26:22)
at each (/home/ubuntu/workspace/node_modules/hapi/lib/request.js:401:16)
at iterate (/home/ubuntu/workspace/node_modules/items/lib/index.js:36:13)
at done (/home/ubuntu/workspace/node_modules/items/lib/index.js:28:25)
at module.exports.internals.Auth.internals.Auth._authenticate (/home/ubuntu/workspace/node_modules/hapi/lib/auth.js:222:16)
at internals.Auth.authenticate (/home/ubuntu/workspace/node_modules/hapi/lib/auth.js:197:17)
Wie definiere ich die Sammlung richtig? Vielen Dank.
Danke! Als ich Ihr Beispiel anwendete, bekam ich einen Fehler: TypeError: Kann die Eigenschaft 'db' von null nicht lesen. Es scheint, von dieser Linie zu sein: db = client.db ('learning_mongo') – redshift
Behoben: Es war ein Authentifizierungsproblem, also musste ich sicherstellen, dass die URL korrekt war. Es war nicht, also habe ich es korrigiert und es ist jetzt in Ordnung! Vielen Dank! – redshift