2011-01-14 11 views
2

Ich versuche vor Ajax zu authentifizieren in eine DatenbankAjax nach node.js Express-App?

$('#button').click(function() {  
    $.post('/db/', { 
    stuff: { "foo" : "bar"} 
    }, callback, "json"); 
}); 

Hier ist mein node.js Code einzufügen:

server.get('/', function(req,res){ 
console.log(res); 
    res.render('index.ejs', { 
    locals : { 
       header: '#Header#' 
      ,footer: '#Footer#' 
      ,title : 'Page Title' 
      ,description: 'Page Description' 
      ,author: 'Your Name' 
      ,analyticssiteid: 'XXXXXXX' 
      } 
    }); 
}); 

^^ dieser Teil funktioniert ok. Es kommt von einem Muster, ich kann zu localhost gehen und die Titelseite sehen.

Dieser nächste Teil soll sein, wo der Mongo-Einsatz passiert. Das gibt mir ein 404.

server.on('/db/', function(req,res){ 
    console.log(req); 
    console.log(res); 
    var db = new mongo.Db('dbname' , new mongo.Server('localhost', 20003, {}), {}); 
    db.open(function (err) { 
     db.collection('testCollection', function (err, collection) { 
      collection.insert(res.stuff); 
     }); 
    }); 
}); 

Was ich versuche das Objekt stuff in Testcollection zu tun ist, ein.

Im Moment bin ich immer ein 404 auf/db/

Ich bin sicher, das ist sehr falsch. Ich glaube nicht, dass ich server.on verwenden soll, server.get funktioniert auch nicht. Bitte beraten, danke.

Antwort

6

Sie müssen server.post verwenden, da Sie eine POST Anfrage über jQuery machen.

server.on fügt dem Server einen Ereignis-Listener hinzu, in diesem Fall für das nicht existente Ereignis /db/, das niemals von irgendetwas ausgelöst wird.

Bitte nehmen Sie sich Zeit und lesen Sie unbedingt die express.js Guide, die Node.js könnte auch nützlich sein.

2

Da Sie einen Post erwarten, sollte Ihr/db/-Handler in einer server.post-Methode definiert werden. Sie erhalten einen 404, da auf dem Server keine Route für die Kombination aus POST und/db/definiert ist.

1

sollten Sie auch die db verbinden werden die Authentifizierung und nicht auf die db auf jede Anfrage

var db = new mongo.Db('dbname' , new mongo.Server('localhost', 20003, {}), {}); 
db.authenticate(user, password, function({ // callback })); 

server.post('/db/', function(req,res){ 
    db.open(function (err) { 
    db.collection('testCollection', function (err, collection) { 
     collection.insert(. . .); 
    }); 
    }); 
}); 
+0

denken werden wieder anschließen sollte ich dort in der authenticate Funktion ein Tippfehler? – expressnoob

+0

Danke Ich habe die neue mongo.db außerhalb des Request-Callbacks verschoben, aber ich kann die Authentifizierungsfunktion nicht nach draußen bringen und funktioniert trotzdem. – expressnoob