【发布时间】:2018-07-06 10:37:00
【问题描述】:
我正在使用 Angular 6,我希望在页面加载后立即填写一个表单,它永远不会为空,并且可以随时提交。
在我的表单中,我有一个双向绑定
first name <input type="text" id="firstname" [(ngModel)]="firstname" name="firstname" >
在我拥有的组件中
ngOnInit() {
this.profileService.getProfile(this.user_id).subscribe((data) =>{
if(data.success){
this.firstname = data.firstname;
})
}
所以,一旦页面加载,我正在填写表单,并且由于双向绑定,表单永远不会为空(除非用户故意删除所有内容,在这种情况下,角度检查空字段并且不会提交。 )。因此,用户可以随时提交。
在服务中,getProfile函数是
createAuthorizationHeader(headers: Headers) {
headers.append('Authorization', this.token);
headers.append('Content-Type','application/json');
}
getProfile(user_id){
let headers = new Headers();
this.createAuthorizationHeader(headers);
return this.http.get('http://localhost:3000/profile/'+user_id, {headers:headers}).pipe(map(res => res.json()));
}
我的问题是 node.js 每次刷新时都会在控制台中显示Error: Can't set headers after they are sent.。
这是因为我的代码和随时提交的能力吗?我怎样才能解决这个问题?我应该能够设置一次相同的标题并在以后的每次getProfile 调用中使用它们。我尝试了类似
createAuthorizationHeader(headers: Headers) {
headers.append('Authorization', this.token);
headers.append('Content-Type','application/json');
}
let headers = new Headers();
this.createAuthorizationHeader(headers);
getProfile(user_id){
return this.http.get('http://localhost:3000/profile/'+user_id, {headers:headers}).pipe(map(res => res.json()));
}
然后 angular 说'return' outside of function 关于getProfile。
这里有什么帮助吗?
谢谢
编辑
从节点点出发,这是我用角度击中的路线
router.get('/:userid', validate.required(), (req, res)=>{
user.query('select firstname from user WHERE id = $1', [req.params.userid])
.then((resolved)=>{
res.json({success:true, data:data });
})
.catch((error)=>{
res.json({success:false, msg:errorvalue});
});
});
这是validate 中间件
exports.required = ()=>{
return (req, res,next)=>{
const token = req.get('Authorization');
const key = config.key;
jwt.verify(token, key,function(err, decoded) {
if (err){res.json({redirect:true});}
if (decoded){
let dateNow = Math.floor(Date.now() / 1000);
if (dateNow > decoded.exp){res.json({redirect:true});}
next();
}
else {res.json({redirect:true});}
});
}
}
【问题讨论】:
-
如果您遇到 NodeJS 错误,那么这不是 Angular 错误。你的 API 使用 NodeJS 吗?
-
帮助不大? - 不要使用 Angular 应用程序来调试后端问题。这提供了不必要的移动部件。如果是 Node 问题(很可能是),请提出特定于 Node 的问题并提供 stackoverflow.com/help/mcve 。您应该能够通过常规 Postman 请求复制问题,减去整个 Angular 内容。
-
是的,我正在访问我创建的节点 API。我应该发布什么节点代码?此路由受特定于路由的中间件保护,该中间件检查标头中的令牌
标签: node.js angular http-headers