【发布时间】:2016-07-21 20:41:56
【问题描述】:
我在通过 :id 参数检索存储的数据(在 MongoDB 中)时遇到问题。该链接有效,并将我带到指定的 url (./contests/1),但数据未显示。在使用 (db.contests.find( {id:1} )) 在 mongo CMD 中查询时,正确的对象数据会正确显示。
路由/contest.js
router.route("/contests/:id")
.get(function(req, res, next) {
Contest.findOne({id: req.params.id}, function(err, contest) {
if(err) {
res.send(err);
}
res.json(contest);
});
服务/contestService.js
app.factory("contestService", ["$http", "$resource",
function($http, $resource)
{
var o = {
contests: []
};
function getAll() {
return $http.get("/contests").then(function(res) {
angular.copy(res.data, o.contests);
});
}
function get(id) {
return $resource('/contests/:id');
}
o.getAll = getAll;
o.get = get;
return o;
}]);
})();
控制器/contestController.js
var app = angular.module("sportsApp.controllers.contest,["ui.router"]);
app.config(["$stateProvider", function($stateProvider) {
$stateProvider.state("contest", {
parent: "root",
url: "/contests/:id",
views: {
"container@": {
templateUrl: "partials/contests",
controller: "ContestController"
}
}
});
}
]);
app.controller("ContestController", ["$scope","contestService", "$stateParams", function($scope, contestService, $stateParams) {
var contest_id = $stateParams.id;
$scope.contest = contestService.get({id: contest_id});
}]);
})();
竞赛架构
var mongoose = require("mongoose");
var ContestSchema = new mongoose.Schema(
{
id: Number,
tags: String,
matchups: [{
type: mongoose.Schema.Types.ObjectId,
ref: "Matchup"
}],
usersWhoJoined: [{
type: mongoose.Schema.Types.ObjectId,
ref: "User"
}]
});
mongoose.model("Contest", ContestSchema);
任何帮助或建议将不胜感激,因为我正在学习 MEAN 堆栈并且几乎没有经验。
我希望显示特定比赛的对决,其中显示两支球队和其他变量。这是我 mongo 导入的 json 文件,以便在 MongoDB 中创建比赛集合的对象:
{
"id": 1,
"tags": "NBA",
"matchups": [{
"matchupId": 1,
"selectedTeam": "",
"matchupWinner": "Atlanta",
"nbaTeams": [{
"team": "Portland",
"logo": "stylesheets/nbalogos/Portland-Trail-Blazers-Logo.png"
}, {
"team": "Atlanta",
"logo": "stylesheets/nbalogos/atl-hawks.png"
}]
}, {
"matchupId": 2,
"selectedTeam": "",
"matchupWinner": "Dallas",
"nbaTeams": [{
"team": "Dallas",
"logo": "stylesheets/nbalogos/Dallas-Mavericks.png"
}, {
"team": "Detroit",
"logo": "stylesheets/nbalogos/DET.png"
}]
}, {
"matchupId": 3,
"selectedTeam": "",
"matchupWinner": "Golden State",
"nbaTeams": [{
"team": "Golden State",
"logo": "stylesheets/nbalogos/GSW.png"
}, {
"team": "Memphis",
"logo": "stylesheets/nbalogos/Memphis-Grizzlies.png"
}]
}, {
"matchupId": 4,
"selectedTeam": "",
"matchupWinner": "Oklahoma City",
"nbaTeams": [{
"team": "Oklahoma City",
"logo": "stylesheets/nbalogos/OKC-Thunder.png"
}, {
"team": "Pheonix",
"logo": "stylesheets/nbalogos/Pheonix-Suns.jpg"
}]
}, {
"matchupId": 5,
"selectedTeam": "",
"matchupWinner": "Utah",
"nbaTeams": [{
"team": "Sacremento",
"logo": "stylesheets/nbalogos/Sacremento-Kings.jpg"
}, {
"team": "Utah",
"logo": "stylesheets/nbalogos/Utah-Jazz.jpg"
}]
}]
}
我想以这种格式创建每场比赛。
【问题讨论】:
-
不确定整个错误,这可能不相关,因为您在 Postman 中看到了错误,但是 Angular 服务/资源不像 Express 那样工作。您需要手动将 id 与您的 url 连接起来,例如:
return $resource('/contests/' + id);。 -
我对代码进行了更改,不幸的是它与 Postman 错误无关。但是,这对我未来在项目中的路线很有帮助。感谢您的回复。
-
您确定
Contest配置正确,并且 Mongo 正在 Express 中运行吗? -
是的,我确定,但我错了。您的建议确实消除了 Postman 错误,因此非常感谢您。现在,另一个快速的问题,当我尝试使用语法显示任何比赛信息时,{{比赛.id}}或任何其他变量什么都没有显示。还是得到一张空桌子。我的教授要求我上传我的架构,所以我编辑了我的帖子。
-
contestService.get期待什么类型的变量?当你分配$scope.contest时,你用什么类型的变量调用它?
标签: angularjs express mongoose mean-stack ngresource