2017-07-13 2 views
-1

Ich habe zwei Sammlung zuweisen und endgültig. Mein Code ist wie dieseFehler: Header kann nicht festgelegt werden, nachdem sie beim Referenzieren von Sammlungen gesendet werden Knoten JS

app.post('/checkuser',function(req,res){ 

     //var id="ObjectId('"+req.body.id+"')"; 
     var mongo=require('mongodb'); 
    var ObjectID=require('mongodb').ObjectID; 
    var obj_id=new ObjectID(req.body.id); 

     //var username=req.body.username; 
     mongoClient.connect(url,function(err,db){ 
      db.collection('assign',function(err,collection){ 
       collection.findOne({"_id":obj_id},function(err,result){ 
        res.send(result); 
        db.final.findOne({"username":result.user.username},function(err,results){ 
         res.send(results); 
        }) 
       }) 
       }) 
      }) 
    }) 

Die Daten in der assign Sammlung ist in diesem Format

{ 
     "_id" : ObjectId("59674fb5a13752326c939dcd"), 
     "user" : { 
       "username" : "c", 
       "password" : "v" 
     } 
} 

und die Daten in der endgültigen Sammlung ist wie dies

{ 
     "_id" : ObjectId("59674cfc081305f9c8b5bc58"), 
     "username" : "c", 
     "name" : "MAC", 
     "asset" : "PRO", 
     "place" : "Bangalore" 
} 

Ich mag, dass die für den Zugriff auf Daten für den Benutzernamen: "c" durch Bereitstellung der ID in der Zuordnung zuweisen. Mit dem obigen Code, bekomme ich Fehler - Kann Header nicht festlegen, nachdem sie gesendet werden. Was ist der richtige Weg dies zu implementieren?

+0

Sie müssen Ergebnisdaten in einem Objekt manipulieren, und senden Sie es am Ende der Anfrage. –

+0

Wie ist das gemacht? @AnkitBalyan – Aayushi

Antwort

0

Sie rufen res.send() mehrere Male für die gleichen res. Sie können eine Antwort nur einmal für eine einzelne HTTP-Anfrage senden.

Wenn Sie mit mehreren Informationen antworten möchten, müssen Sie sie in irgendeiner Weise kombinieren, bevor Sie sie an res.send() übergeben.

+0

Wie kann das gemacht werden. Muss ich verschachtelte Ajax-Anrufe machen? – Aayushi

+0

Versuchen Sie, nur den ersten res.send() - Aufruf 'res.send (result);' zu löschen. Das könnte sogar das tun, wonach Sie suchen. – agm1984

0

Ich fand heraus, dass der Fehler im Grunde bedeutet, dass die Daten bereits gesendet und dann die Kopfzeile manipuliert wird.Auch kann Res-Objekt nicht mehrmals in der gleichen Funktion aufgerufen werden. Daher sollte die zweite Abfrage in der Erfolgsfunktion der ersten Funktion ausgeführt werden. Hier

0

ist eine mögliche Lösung:

mongoClient.connect(url,function(err,db){ 
     db.collection('assign',function(err,collection){ 
      collection.findOne({"_id":obj_id},function(err,result){ 
       db.final.findOne({"username":result.user.username},function(err, result, results){ 
        res.send({ "first": result, "second": results }); 
       }) 
      }) 
      }) 
     }) 

Leider kann ich das nicht bestätigen, aber was es will zu tun ist das erste Ergebnis in die nächste Funktion übergeben und dann ein Objekt mit beiden Ergebnissen senden drin. Wenn es funktioniert, sollte es dich wenigstens wieder in Bewegung bringen.

Sie befinden sich in einem chaotischen Gebiet, weil Sie ziemlich tief nisten. Ich empfehle, über Promises und Async zu lernen und zu üben. Ziel ist es, für jede Sache eine Funktion zu schaffen, und jede Funktion sollte nur einen Zweck haben. Sie sollten auch "Callback-Hölle" erforschen, was es ist und wie man es vermeidet.

Verwandte Themen