Javascript 我的角度get请求的正确语法是什么?
我试图通过在后端创建一个端点并使用Angular Http服务查询它来通过ID获取用户 正确的语法是什么 这是我目前的代码: 服务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
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
,而该订阅尚未可用。观测值是异步的,这就是它们的全部意义;请参见例如.用户。投票
属性投票
在类型响应
上不存在。请查看我编辑的问题代码。我不再有任何错误,但我不确定它是否会工作。你怎么认为?