Angular:在抓取中有条件地设置“凭据”选项

时间:2019-03-11 13:17:37

标签: angular fetch

对于Angular应用程序,我需要对Laravel后端进行一些API调用,该后端必须在PHP会话中临时存储一些数据。 Angular应用程序运行在http://localhost:4200上,而Laravel后端运行在本地.test域上。为了使Laravel会话cookie能够跨域工作,我必须在本地将credentials选项设置为include。尽管生产环境中将不需要它们,因为它们都将在同一个域中运行。

要解决这个问题,我想在我的环境文件中使用一个设置(我在本地有一个,用于生产的是一个)。但是,当我简单地将credentials: environment.credentialscredentials中的environment在本地设置为include,将same-origin用于生产)添加到fetch调用中时,我收到错误Types of property 'credentials' are incompatible. Type 'string' is not assignable to type 'RequestCredentials',这是有道理的。要解决此问题,我可以将其更改为credentials: environment.credentials === 'include' ? 'include' : 'same-origin'(有效),但这似乎是不必要的额外检查,是否有更好/更简单的方法来动态设置此值,或者是否可以强制转换{{1 }}到string

作为参考,我的提取调用看起来像这样的atm:

RequestCredentials

1 个答案:

答案 0 :(得分:2)

environment.credentials是一个字符串,而凭据是RequestCredentials。但是,您可以像这样将字符串转换为RequestCredentials

const url = environment.apiUrl + '/slug/';
const response = await fetch(url, {
  method: 'POST',
  credentials: environment.credentials as RequestCredentials,
  headers: {
    'Content-Type': 'application/json'
  },
  body: ...
});