如何将参数从 Angular 2 服务传递到节点 js 函数?意思是

Posted

技术标签:

【中文标题】如何将参数从 Angular 2 服务传递到节点 js 函数?意思是【英文标题】:How to pass a parameter from angular 2 service to node js function? MEAN 【发布时间】:2018-04-03 09:31:34 【问题描述】:

我有一个 posts 集合,每个帖子都有一个 iduserId

我想查找特定用户的所有帖子(使用 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);
        
    );
);

【问题讨论】:

你还在纠结这个吗?? 是的...任何想法):? 你能添加你的猫鼬帖子架构吗? 【参考方案1】:

在开始编写代码之前完成本教程。

https://angular-2-training-book.rangle.io/handout/http/

【讨论】:

【参考方案2】:

您需要将 query params 发送到后端,以便能够在您的 nodejs 控制器中过滤它们。在您的 Angular 服务中,您将拥有如下内容:

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。您需要从 '@angular/common/http' 导入 HttpParams 我假设您的 Angular > 4.3,有关 HttpParams 的更多信息请参阅 Angular Official Doc

现在,您只需在 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's in post scheme 

    post.find(query).exec(function(err, posts) 
        if (err) 
            console.log("ERROR FETCHING POSTS!!");
         else 
            res.json(posts);
        
    );
);

如果未提供user_id 查询参数,post.find 函数将返回所有帖子,如果提供,则返回该用户创建的所有帖子。 希望对您有所帮助。

【讨论】:

谢谢兄弟...你能给我一个活生生的例子的链接吗?

以上是关于如何将参数从 Angular 2 服务传递到节点 js 函数?意思是的主要内容,如果未能解决你的问题,请参考以下文章

如何将用户输入从节点服务器传递到外部 api 调用?

如何将文件中的其他参数从 Angular 传递给 ASP.NET Core 控制器?

将数据从一个组件传递到另一个 Angular 2 时的服务变量

如何将从服务接收到的 json 数据传递到 Angular 4 的角材料组件中的数组

Angular 6 - 通过服务将消息传递到从组件到消息组件

将数据从一个组件传递到另一个 Angular 2