2016-08-18 4 views
0

Ich habe eine Angular-Anwendung, die in der Lage sein muss, Daten aus einer MongoDB-Sammlung zu erstellen. Ich verwende den $ resource service in der flConstruct, um Daten vom Server anzufordern. Der "Abfrage" -Aufruf gibt alle Daten zurück und scheint gut zu funktionieren. Wenn ich versuche, Daten für nur eines der Konstrukte mit dem 'Get' abzurufen, werden keine Daten zurückgegeben.

Ich habe auf die Konsole gedruckt, um zu sehen, was zum Dienst kommt und ich sehe nicht, dass der Parameter für die Funktion findOne verfügbar ist. Unten ist die Ausgabe an die Konsole

Get - constructs.getConstructById 
constructData.id undefined 
req.params._id undefined 
req.query._id undefined 
No Error - Construct Data Retrieved 
Get - constructs.getConstructs (Id) - No Error 
Returned - construct null 
Get - constructs.getConstructs (Id) - Sending Back question 
Get - constructs.getConstructs (Id) - Sending Back neither error nor question 

// Eckige Dienst mit dem Namen, flConstruct

angular.module('app').factory('flConstruct',function($resource){ 
var ConstructResource = $resource('/api/constructs/:id', {id: "@id"}, { 
    get: { method: 'GET', url: '/api/constructs/byId/:id', params: {id: "@id"}}, 
    query: { method: 'GET' , url: '/api/constructs', isArray: true }, 
    create: { method: 'POST'}, 
    update: { method: 'PUT' }, 
    delete: { method: 'DELETE', params: {id: '@id'}} 
}); 

return ConstructResource; 
}); 

// Express namens config-Datei, routes.js

var constructs = require('../controllers/constructs'), 

module.exports = function(app){ 


app.get('/api/constructs', constructs.getConstructs); 
app.get('/api/constructs/byId', constructs.getConstructById); 

app.post('/api/constructs', constructs.createConstruct); 
app.put('/api/constructs', constructs.updateConstruct); 
app.delete('/api/constructs/:id', constructs.deleteConstruct); 
}); 
} 

// Express-Controller namens , construct.js

var Construct = require('mongoose').model('Construct'); 

exports.getConstructs = function(req,res){ 
var constructData = req.body; 
console.log("Get - constructs.getConstructs"); 
console.log("constructData.id " + constructData.id); 
console.log("constructData " + constructData); 
console.log("req.params.id " + req.params.id); 
console.log("req.query.id " + req.query.id); 
Construct.find({}).exec(function(err,collection){ 
    if (err){ 
     console.log("Error - No Construct Retrieved"); 
    }else 
    { 
     console.log("No Error - Construct Data Retrieved"); 
    } 
    //console.log(collection); 
    res.send(collection); 
}) 
}; 

exports.getConstructById = function(req,res) { 
console.log("Get - constructs.getConstructById") 
var constructData = req.body; 
console.log("constructData.id " + constructData.constructId);; 
console.log("req.params._id " + req.params._id) 
console.log("req.query._id " + req.query._id) 
Construct.findOne({_id:req.params.id}).exec(function(err,construct){ 
if (err){ 
    console.log("Error - No Construct Retrieved"); 
    console.log("Get - constructs.getConstructs (Id) - Error"); 
    res.send(null); 
}else 
{ 
    console.log("No Error - Construct Data Retrieved"); 
    console.log("Get - constructs.getConstructs (Id) - No Error"); 
    //console.log("Returned - construct._id " + construct._id) 
    //console.log("Returned - construct.id " + construct.id) 
    console.log("Returned - construct " + construct) 
    console.log("Get - constructs.getConstructs (Id) - Sending Back question"); 
    res.send(construct); 
} 
console.log("Get - constructs.getConstructs (Id) - Sending Back neither error nor  question"); 
}) 

}; 
+0

wo rufst du die findOne Funktion an und übergibst sie einen param? – HolyMoly

+0

oh warte ich denke, ich sehe es hier 'Construct.findOne ({_ id: req.params.id}). Exec()' – HolyMoly

+0

Ihre 'getConstructById' Methode sucht nach 'constructId' im Anfragetext, aber Ihre GET Anfrage spezifiziert die ID als Pfadvariable. GET-Anfragen haben auch keinen Anfragekörper – Phil

Antwort

0

Ich habe meinen Fehler gefunden. Es ist alles innerhalb des Angular-Codes. Der Aufruf von get, der in der Datei flCachedConstruct.js ausgeführt wird, hat den Parameter, der übergeben werden soll, nicht richtig definiert. Ich musste den Parameternamen "id" sowie den Parameter value, constructID angeben. Die "ID" in diesem Funktionsaufruf entspricht dem, was ich den Parameter in flConstruct.js genannt habe.

flConstruct.get({id: constructId }, function(data) { 
Verwandte Themen