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");
})
};
wo rufst du die findOne Funktion an und übergibst sie einen param? – HolyMoly
oh warte ich denke, ich sehe es hier 'Construct.findOne ({_ id: req.params.id}). Exec()' – HolyMoly
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