Как передать параметр из службы angular 2 в функцию js узла? ЗНАЧИТ

0

У меня есть сбор сообщений, и у каждого сообщения есть 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);
        }
    });
});
  • 0
    Вы все еще застряли на этом ??
  • 0
    Да ... есть идеи)?
Показать ещё 1 комментарий
Теги:
mean-stack
mongoose

2 ответа

0
Лучший ответ

Вам нужно отправить 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 вернет все сообщения, если она предоставлена, вернет все сообщения, созданные этим пользователем. Надеюсь, это поможет.

  • 0
    Спасибо, братан, я скоро попробую ..
  • 0
    Спасибо, брат ... ты можешь дать мне ссылку на живой пример?
0

Завершите этот учебник перед переходом на код.

https://angular-2-training-book.rangle.io/handout/http/
  • 0
    Я думаю, что я должен .. спасибо ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню