获取 EJS 模板中项目的 Id 并注入服务
Get Id for item in EJS template and inject into service
我正在尝试弄清楚如何将 Id 传递到我的 PlayerDetailController
中,然后在我的服务中使用它。
我的主要路线如下 app.js
:
var players = require('./routes/players');
app.use('/players', players);
我在 players
路线 (routes/players.js
) 中有以下路线:
var express = require('express');
var router = express.Router();
/* GET /players listing. */
router.get('/', function(req, res, next) {
res.render('players', { title: 'Players', action: 'list'});
});
/* GET /player details. */
router.get('/:id', function(req, res, next) {
res.render('players', { title: 'Player Details', action: 'details'});
});
module.exports = router;
我的主要 players.ejs
模板中的以下内容:
<!-- other layout elements -->
<% if (action === 'details') { %>
<% include partials/players/details %>
<% } else if (action === 'update') { %>
<% include partials/players/update %>
<% } else if (action === 'remove') { %>
<% include partials/players/remove %>
<% } else { %>
<% include partials/players/list %>
<% } %>
<!-- other layout elements -->
还有我的 deatils.ejs
部分:
<div ng-controller="PlayerDetailsController">
<div class="playerDetails">
<p>
<strong>{{ player.name}} - {{ player.position }} - {{ player.team }}</strong><br/>
Touchdowns: {{ player.touchdowns }}<br/>
Yards: {{ player.yards }}
</p>
</div>
</div>
我的 PlayerDetiails 服务:
// PlayerDetails Service
app.factory('PlayerDetails', ['$http', function($http){
// below is where I'm trying to inject the Id
return $http.get('/api/player/:id');
}]);
但我不知道如何将显示在我的路线中的 ID(例如 http://localhost:3000/players/550130d32f3345bc065f2ecf
)传递到我的控制器中,以便我的控制器调用并接收正确的播放器数据。我该怎么做?我想我可以将 id
属性 添加到 res.render
调用中,但我不确定在 EJS 模板中我会用它做什么。任何帮助将不胜感激!
传递给路由的 ID 将在 req.params.id
中可用。您可以使用 ID 从数据库中检索播放器并将对象传递给视图。
像这样,使用 Mongoose ODM。如果您使用另一个 database/ODM/ORM,代码会有所不同,但思路是一样的:
/* GET /player details. */
router.get('/:id', function(req, res, next) {
Player.find({ _id: req.params.id }, function(err, player) {
if(err) return next(err);
res.render('players', { title: 'Player Details', action: 'details', player: player });
});
});
然后您将可以通过 player
属性访问播放器文档。
如果你想创建一个 API 来 return 所有播放器数据 JSON 格式,你可以这样做:
/* GET /api/player/:id */
router.get('/:id', function(req, res, next) {
Player.find({ _id: req.params.id }, function(err, player) {
if(err) return next(err);
res.json(player);
});
});
将 id 传递给您的模板:
router.get('/:id', function(req, res, next) {
res.render('players', { title: 'Player Details', action: 'details', id: req.params.id});
});
ng-init 收到 id:
<div ng-controller="PlayerDetailsController" ng-init="id = <%= id %>">
PlayerDetails 服务:
app.service('PlayerDetails', ['$http', function($http){
return {
get: function(id) {
return $http({
url: '/api/player/:id',
params: {id: id},
method: 'GET'
});
}
};
}]);
PlayerDetailsController 中的某处:
// id is from ng-init
PlayerDetails.get($scope.id).success(function(player) {
$scope.player = player;
}).error(function(error) {
console.error(error);
});
我正在尝试弄清楚如何将 Id 传递到我的 PlayerDetailController
中,然后在我的服务中使用它。
我的主要路线如下 app.js
:
var players = require('./routes/players');
app.use('/players', players);
我在 players
路线 (routes/players.js
) 中有以下路线:
var express = require('express');
var router = express.Router();
/* GET /players listing. */
router.get('/', function(req, res, next) {
res.render('players', { title: 'Players', action: 'list'});
});
/* GET /player details. */
router.get('/:id', function(req, res, next) {
res.render('players', { title: 'Player Details', action: 'details'});
});
module.exports = router;
我的主要 players.ejs
模板中的以下内容:
<!-- other layout elements -->
<% if (action === 'details') { %>
<% include partials/players/details %>
<% } else if (action === 'update') { %>
<% include partials/players/update %>
<% } else if (action === 'remove') { %>
<% include partials/players/remove %>
<% } else { %>
<% include partials/players/list %>
<% } %>
<!-- other layout elements -->
还有我的 deatils.ejs
部分:
<div ng-controller="PlayerDetailsController">
<div class="playerDetails">
<p>
<strong>{{ player.name}} - {{ player.position }} - {{ player.team }}</strong><br/>
Touchdowns: {{ player.touchdowns }}<br/>
Yards: {{ player.yards }}
</p>
</div>
</div>
我的 PlayerDetiails 服务:
// PlayerDetails Service
app.factory('PlayerDetails', ['$http', function($http){
// below is where I'm trying to inject the Id
return $http.get('/api/player/:id');
}]);
但我不知道如何将显示在我的路线中的 ID(例如 http://localhost:3000/players/550130d32f3345bc065f2ecf
)传递到我的控制器中,以便我的控制器调用并接收正确的播放器数据。我该怎么做?我想我可以将 id
属性 添加到 res.render
调用中,但我不确定在 EJS 模板中我会用它做什么。任何帮助将不胜感激!
传递给路由的 ID 将在 req.params.id
中可用。您可以使用 ID 从数据库中检索播放器并将对象传递给视图。
像这样,使用 Mongoose ODM。如果您使用另一个 database/ODM/ORM,代码会有所不同,但思路是一样的:
/* GET /player details. */
router.get('/:id', function(req, res, next) {
Player.find({ _id: req.params.id }, function(err, player) {
if(err) return next(err);
res.render('players', { title: 'Player Details', action: 'details', player: player });
});
});
然后您将可以通过 player
属性访问播放器文档。
如果你想创建一个 API 来 return 所有播放器数据 JSON 格式,你可以这样做:
/* GET /api/player/:id */
router.get('/:id', function(req, res, next) {
Player.find({ _id: req.params.id }, function(err, player) {
if(err) return next(err);
res.json(player);
});
});
将 id 传递给您的模板:
router.get('/:id', function(req, res, next) {
res.render('players', { title: 'Player Details', action: 'details', id: req.params.id});
});
ng-init 收到 id:
<div ng-controller="PlayerDetailsController" ng-init="id = <%= id %>">
PlayerDetails 服务:
app.service('PlayerDetails', ['$http', function($http){
return {
get: function(id) {
return $http({
url: '/api/player/:id',
params: {id: id},
method: 'GET'
});
}
};
}]);
PlayerDetailsController 中的某处:
// id is from ng-init
PlayerDetails.get($scope.id).success(function(player) {
$scope.player = player;
}).error(function(error) {
console.error(error);
});