我正在關注angular 2 Tutorial of Heroes指南,並試圖從mongoDb中獲取並顯示一個英雄詳細信息部分(如教程中所示)。我能夠在mongo中找到我的用戶(英雄)運行節點後端,但在訪問該節時卻不是單個英雄。 我對typeScript完全陌生,所以請隨身攜帶。獲取Angular 2的單個文檔
hero.service.ts
//The part that gives me errors.
private heroesUrl = 'http://localhost:8080/admin/users';
constructor(private http: Http) { }
//Works
getHeroes() {
return this.http.get(this.heroesUrl)
.toPromise()
.then(response => response.json() as Hero[])
.catch(this.handleError);
}
//Doesn't work
getHero(_id: number) {
return this.getHeroes()
//How should I work with the _id?
.then(heroes => heroes.find(hero => hero._id === _id));
}
//:note that this worked properly when I had the documents in memory with a mock api. Where the ids initially where numbers.
在我看來,該ID必須是數字:
https://angular.io/docs/ts/latest/tutorial/toh-pt5.html
The /detail/ part of that URL is constant. The trailing numeric id part changes from hero to hero. We need to represent that variable part of the route with a parameter (or token) that stands for the hero's id.
,而且我的ObjectId得到的MongoDB不與此合作很好。如果我將number參數改爲字符串,並將id解析爲字符串,它也不起作用,我也沒有料到它或者因爲我現在不知道我在做什麼!
getHero(_id: String)
反正...當我跑我的打字稿編譯我得到這個錯誤:
app/+heroes/hero.service.ts(24,65): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'.
我真的不明白這是如何工作的角2 /打字稿,遺憾的是不知道要麼就我的問題要求什麼。
app.routes.ts
const routes: RouterConfig = [
{
path: '',
component: DashboardComponent
},
{
path: 'detail/:id',
component: HeroDetailComponent
},
{
path: 'heroes',
component: HeroesComponent
}
];
我的應用程序識別ID,並將我的正確路徑:http://localhost:8080/detail/5773fbc1383ec4868619f1fa
不過,雖然在頁面上沒有找到數據。
Failed to load resource: the server responded with a status of 404 (Not Found)
在我的儀表板中,這是我如何導航到英雄自己的路線。從實例教程
export class DashboardComponent implements OnInit {
heroes: Hero [] = [];
constructor(
private router: Router,
private heroService: HeroService) {
}
ngOnInit() {
this.heroService.getHeroes()
.then(heroes => this.heroes = heroes);
}
gotoDetail(hero: Hero) {
let link = ['/detail', hero._id];
this.router.navigate(link);
}
}
一切期望返回的數據的ID是數字。如果我改變的數值是字符串,而不是在..
//hero.ts
export class Hero {
_id: number;
name: string;
}
和所有其他地方發生這種情況,我收到了一堆錯誤,我不能顯示的每一個地方,這將導致得多例子碼。
我的REST API的節點: (這可以作爲使用郵差時預期)
//server/routes/admin.js
var express = require('express');
var app = express();
var router = express.Router();
var passport = require('passport');
var User = require('../models/user');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
router.get('/users', /*isAdmin,*/ function(req, res) {
User.find(function(err, users){
if (err)
return res.send(err);
res.json(users);
});
});
//CRUD operations for a single Company by its id
router.route('/users/:id')
.get(/*isAdmin, */function(req, res){
User.findById(req.params.id, function(err, user){
if (err)
res.send(err);
res.json(user);
});
})
我將如何做才能找到一個mongodb的單個文檔相對於它的_id從客戶的角度?任何可能使我指向正確方向的東西。
謝謝!
這似乎是合理的,但遺憾的是它並沒有爲我做的伎倆。 –
好的,我剛剛讀了你的教程,這是在內存數據庫中,所以你似乎沒有處理一個真正的web API。但是,由於您使用本地主機url,我想您已經完成了節點REST API。你能告訴我們你的節點API的代碼嗎?我認爲它錯過了一些東西。 – Odonno
是的,這是正確的。正如我所說,我能夠讓所有用戶從我的REST API返回,但不能爲單個用戶返回。我將確保添加服務器片段。 –