Javascript 我的角度get请求的正确语法是什么?

Javascript 我的角度get请求的正确语法是什么?,javascript,node.js,angular,service,Javascript,Node.js,Angular,Service,我试图通过在后端创建一个端点并使用Angular Http服务查询它来通过ID获取用户 正确的语法是什么 这是我目前的代码: 服务 voteOn(poll: Poll, userID: string, choice: number) { var user; this.http.get('/'+userID) .map(response => response.json()) .subscribe(json => user = json ) user.v

我试图通过在后端创建一个端点并使用Angular Http服务查询它来通过ID获取用户

正确的语法是什么

这是我目前的代码:

服务

voteOn(poll: Poll, userID: string, choice: number) {
  var user;
  this.http.get('/'+userID)
  .map(response => response.json())
  .subscribe(json => user = json )
        user.votes.push({poll, choice });
        const body = JSON.stringify(user);
        const headers = new Headers({'Content-Type': 'application/json'});
        const token = localStorage.getItem('token')
            ? '?token=' + localStorage.getItem('token')
            : '';
        return this.http.patch('https://voting-app-10.herokuapp.com/user'+token, body, {headers: headers})
            .map((response: Response) => response.json())
            .catch((error: Response) => {
                this.errorService.handleError(error);
                return Observable.throw(error);
            })
            .subscribe();
}
router.get('/:userid', function (req, res, next) {
  var userId = req.params.userid;
  UserModel.findById(userID, function (err, user) {
    return res.send(user);
  });
});
路线

voteOn(poll: Poll, userID: string, choice: number) {
  var user;
  this.http.get('/'+userID)
  .map(response => response.json())
  .subscribe(json => user = json )
        user.votes.push({poll, choice });
        const body = JSON.stringify(user);
        const headers = new Headers({'Content-Type': 'application/json'});
        const token = localStorage.getItem('token')
            ? '?token=' + localStorage.getItem('token')
            : '';
        return this.http.patch('https://voting-app-10.herokuapp.com/user'+token, body, {headers: headers})
            .map((response: Response) => response.json())
            .catch((error: Response) => {
                this.errorService.handleError(error);
                return Observable.throw(error);
            })
            .subscribe();
}
router.get('/:userid', function (req, res, next) {
  var userId = req.params.userid;
  UserModel.findById(userID, function (err, user) {
    return res.send(user);
  });
});
这显然是错误的。调用user.voces.push时未定义用户变量。如何将第一次查询的结果正确分配给用户


解决方案:

voted(poll: Poll, userID: string, choice: number) {
      var user;
      this.http.get('/'+userID)
      .map(response => response.json())
      .subscribe(
            json => {
              user = json;
              var result = "";
              for (var i = 0; i < user.votes.length; i ++) {
                if (user.votes[i].poll == poll.pollId) {
                  result = "disabled";
                  if (user.votes[i].choice == choice) {
                    result =  "cheked";
                  }
                }
              }
              console.log("RESULT:"+result);
              return result;
          }
      )
    }
poll(poll:poll,userID:string,choice:number){
var用户;
this.http.get('/'+userID)
.map(response=>response.json())
.订阅(
json=>{
user=json;
var结果=”;
for(var i=0;i
这里只谈到Angular2侧(对Express不太熟悉,但路线处理程序看起来不错):

从高层次来看,这似乎是合理的。您的核心问题是,您将在传递给Observable.map()的lambda中返回一个订阅,该订阅将封装在Observable:Observable中。通常,从客户端方法中,您希望返回一个可观察的结果,而不是订阅,并让使用客户端的人决定如何订阅结果:

return this.http.patch(
                    'https://voting-app-10.herokuapp.com/user'+token, 
                    body, {headers: headers})
                .map((response: Response) => response.json())
                .catch((error: Response) => {
                    this.errorService.handleError(error);
                    return Observable.throw(error);
                })
这将返回Observable,不过如果您定义一个接口并将response.json()强制转换为接口,则可以获得更好的类型

避免外部可观察的包装,而是考虑使用:


对于Angular Http对象(加上一个样板REST客户端基类)的一般用法,请看:

什么是“正确的语法”?您是否从编译器中获得语法错误?打个招呼。如果你只是说“我该怎么做”,那么我建议你做一些研究;从官方文件开始。@jornsharpe我已经读过文件了。我知道我喜欢什么方法,但由于我对angular还不熟悉,所以在这种情况下,我在实现上遇到了一些问题。那么,请具体说明“问题”-错误?意外行为?帮助其他人理解并重现您的问题。请不要回滚有效的编辑。@jonrsharpe您是对的。让我编辑我的问题。在问题中加一个。目前,尽管存在缩进,但您仍试图在订阅之外操纵
user
,而该订阅尚未可用。观测值是异步的,这就是它们的全部意义;请参见例如.
用户。投票
属性
投票
在类型
响应
上不存在。请查看我编辑的问题代码。我不再有任何错误,但我不确定它是否会工作。你怎么认为?