У меня есть сбор сообщений, и у каждого сообщения есть id и userId.
Я хочу найти все сообщения для определенного пользователя (используя свойство userId).
вот моя услуга angular2:
export class PostsService {
private _url = '/api/posts';
constructor(private _http: Http) { }
getPosts(): Observable<Post[]> {
return this._http.get(this._url).map(res => res.json());
}
getUserPosts(userId: number) {
return this._http.get(this._url + '/' + userId).map(posts => posts.json());
}
}
и мой код nodejs:
router.get('/posts', function(req, res) {
post.find({}).exec(function(err, posts) {
if (err) {
console.log("ERROR FETCHING POSTS!!");
} else {
res.json(posts);
}
});
});
router.get('/posts/:id', function(req, res) {
post.findById(req.params.id).exec(function(err, posts) {
if (err) {
console.log("ERROR FETCHING POSTS!!" + err);
} else {
res.json(posts);
}
});
});
Вам нужно отправить query params
на бэкэнд, чтобы иметь возможность фильтровать их в контроллерах nodejs. В вашей Угловой службе у вас будет что-то вроде этого:
export class PostsService {
private _url = '/api/posts';
constructor(private _http: Http) { }
getPosts(): Observable<Post[]> {
return this._http.get(this._url).map(res => res.json());
}
getUsersPost():Observable<Post[]>{
let params - new HttpParams();
params = params.append('user_id', userIdValue );
return this._http.get(this._url, { params: params }). subscribe(....more code)
}
getUserPosts(userId: number) {
return this._http.get(this._url + '/' + userId).map(posts => posts.json());
}
}
конечный URL-адрес будет примерно таким: /api/posts?user_id=userIdValue
Вам нужно импортировать HttpParams
из '@angular/common/http'
Я полагаю, что у вас есть Angular> 4.3, для получения дополнительной информации о HttpParams
см. Angular Официальный документ
Теперь вам просто нужно отфильтровать сообщение в контроллере nodejs:
router.get('/posts', function(req, res) {
let query = {};
if(typeof req.query.user_id != 'undefined'){
query['createdBy'] = req.query.user_id // supposing that 'createdBy' is where you store the user id in post scheme
}
post.find(query).exec(function(err, posts) {
if (err) {
console.log("ERROR FETCHING POSTS!!");
} else {
res.json(posts);
}
});
});
Если user_id
запроса user_id
не post.find
функция post.find
вернет все сообщения, если она предоставлена, вернет все сообщения, созданные этим пользователем. Надеюсь, это поможет.
Завершите этот учебник перед переходом на код.
https://angular-2-training-book.rangle.io/handout/http/