Angular HTTP请求中的头文件到NodeJS API

我无法使用我的Angular应用程序发送HTTP请求中的标头。 我必须发送一个令牌来授权我的后端是一个NodeJS API的请求。 每个路线都被检查。

当我打印请求标题时:

host: 'localhost:21124', connection: 'keep-alive', 'access-control-request-method': 'GET', origin: 'http://localhost:4200', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36', 'access-control-request-headers': 'authorization,content-type', accept: '*/*', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'pt,en-US;q=0.9,en;q=0.8' } 

我使用“授权”控制标题发送我的令牌。
这是我的CORS和valitation( API ):

 app.use(helmet()); app.use(function (req, res, next) { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); res.setHeader('Access-Control-Allow-Credentials', true); next(); }); app.use(function (req, res, next) { if (req.url !== '/login') { var token = req.headers['Authorization']; if (!token) { res.status(401).send('Token não provido!') } else { jwt.verify(token, SECRET, function(err, decoded) { if (err) { res.status(500).send('Token inválido!'); } else if (decoded) { var date = new Date(); if (decoded.exp < date.getTime()) { next(); } else { res.status(500).send('Token inválido!'); } } }); } } else { next(); } }); 

这里是我的angularAPI服务,我做请求(例如一个请求):

 getAssociados(idClube: string): any { const token = localStorage.getItem('token'); const headers = new Headers({ 'Content-Type': 'application/json', 'Authorization': token }); const options = new RequestOptions({ headers: headers }); return this.http.get(this.associadoUrl + idClube, options) .map(res => res.json()); 

}

我已经用邮递员去做这些事情了。 一切都很好。 我刚刚在我的Angular应用程序(没有授权)中得到错误。

根据交叉来源的讨论 ,如果你发送

 Access-Control-Allow-Origin: * 

那么没有授权信息被发送。 您将需要更改您的node.js应用程序,以发送一个access-control-allow-origin标题明确提到您获得的origin标题。

另外请注意, options预检请求将不包含authorization标题; 只有在浏览器validation了交叉源请求后才会发送。