MongoDBコレクションから構成データを取得する必要があるAngularアプリケーションがあります。私は、サーバーからデータを要求するためにflConstructから作られた2つのHTTP API呼び出し( "query"と "get")を持っています。 "クエリ"呼び出しはすべてのデータを返し、正常に動作しているようです。私が構造体の1つだけのデータを取得しようとすると、エラーが発生します。サーバー側では、私のconstructs.jsスクリプトの適切な関数への呼び出しをルーティングする必要があるroute.jsがあります。 "get"コールは、construct.getConstructByIdにルーティングする必要がありますが、代わりにconstructs.getConstructsへルーティングするように見えます。誰かが私が間違っているかもしれないものを見ることができますか?Angular HTTP API get要求が正しいExpressサーバー機能にルーティングされていません
"flCachedConstructs.queryID(...)$ promise is undefined"というエラーメッセージが表示されますが、取り出された(コレクション)が予想外のもの(単一のドキュメント)であると誤解を招くメッセージだと思います。 。
//flCachedConstructs
angular.module('app').factory('flCachedConstructs', function(flConstruct,$http, $q) {
var constructList = null; // temporarily set to null for testing purposes
var construct;
return {
queryID: function(constructId) {
console.log("flCachedConstruct - queryID function by ID - start");
console.log("flCachedConstruct - queryID function by ID - parameter = constructId " + constructId);
var deferred = $q.defer();
flConstruct.get(constructId, function(data) {
if (data) {
deferred.resolve(data);
}
else {
deferred.reject("Error getting Construct");
}
});
return deferred.promise;
},
queryAll: function() {
console.log("flCachedConstruct - queryAll function, no parameters - start");
if(!constructList || constructList == null) {
console.log("flCachedConstruct - querAlly function - if constructList is null or does not exits");
constructList = flConstruct.query();
}else
{
console.log("flCachedConstruct - queryAll function - if constructList is not null and does exits");
console.log("constructList = " + constructList);
}
return constructList;
},
empty: function() {
console.log("flCachedConstruct - empty function - start");
constructList = null;
console.log("flCachedConstruct - empty function - after setting constructList to null");
return constructList;
}
}
})
//flConstruct.js
angular.module('app').factory('flConstruct',function($resource){
var ConstructResource = $resource('/api/constructs/:id', {_id: "@id"}, {
query: { method: 'GET', isArray: true },
get: { method: 'GET', params: {id: '@id'} , isArray: false },
create: { method: 'POST'},
update: { method: 'PUT' },
delete: { method: 'DELETE', params: {id: '@id'}}
});
return ConstructResource;
});
//routes.js
var constructs = require('../controllers/constructs'),
module.exports = function(app){
app.get('/api/constructs', constructs.getConstructs);
app.get('/api/constructs/:id', constructs.getConstructById);
app.post('/api/constructs', constructs.createConstruct);
app.put('/api/constructs', constructs.updateConstruct);
app.delete('/api/constructs/:id', constructs.deleteConstruct);
app.all('/api/*', function(req,res){
res.sendStatus(404);
});
app.get('*', function (req, res) {
res.render('index', {
bootstrappedUser: req.user
});
});
}
// 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")
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");
}else
{
console.log("No Error - Construct Data Retrieved");
}
res.send(construct);
})
};
私は角度コードに問題を切り分けました。私はハードコードflConstruct.js関数のgetでidはすべて正常に動作します。問題は、パラメータがflConstruct.jsのgetに渡されていないことです。なぜ理解できないのですか? –