axios请求无法读取未定义的属性

zbdgwd5y  于 2023-06-05  发布在  iOS
关注(0)|答案(2)|浏览(209)

我尝试向服务器发出后端请求,并继续返回一个response.data,这是一个HTML字符串,表示为TypeError: Cannot read property of undefined
我需要传递一个data对象,看起来像这样:

const data = {
  visitorId,
  patientId: oldPatientId,
  doctorId
}

我需要像这样传递一个json web令牌:

const userJWT = jwt.sign(
  {
    _id: visitorId,
    refreshCount: 0
  },
  this.localConfig.spyrt.jwtSecret
)

和类似的标题:

const headers = {
  'Content-Type': 'application/json',
  'Authorization': `Bearer ${userJWT}`
}

我在一个异步方法中这样做:

async jwtTest(visitorId: number, oldPatientId: number, doctorId: number): Promise<void> {
  const data = {
      visitorId,
      patientId: oldPatientId,
      doctorId
    }

    const userJWT = jwt.sign(
      {
        _id: visitorId,
        refreshCount: 0
      },
      this.localConfig.spyrt.jwtSecret
    )
    
    const headers = {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${userJWT}`
    }

    if (this.localConfig.spyrt.active) {
      const dto = await axios.post(visitURL, data, {headers}).then((response) => {
        console.log(response.data);
      }).catch((error) => {
        console.log(error);
      });
    }
}

我担心我的axios代码设置不正确。我得到无法读取属性未定义和500 statusCode错误。
我已经尽我所能查阅了axios文档。有没有人看到我的设置有什么问题?
我尝试了这个实现:

if (this.localConfig.spyrt.active) {
  await axios.post(visitURL, data, {headers}).then(function(response) {
  console.log(JSON.stringify(response.data));
}).catch(function(error) {
  console.log(error);
})
}

而这一次我得到了完全相同的回应。
我对API最接近的理解是之前工程师的代码,其设置看起来像这样:

try {
  let response = await fetch(visitURL, {
    method: 'POST',
    headers: {
     'Content-Type': 'application/json',
     'Authorization': 'Bearer ' + acct.jwt
     },
     body: JSON.stringify(visit)
    });
    if (response.ok) {
     let result = await response.json();
     callback(result);
    } else {
      throw new Error('Model: createVisit failed!');
    }
  } catch (error) {
    console.log(error);
  }
7uhlpewt

7uhlpewt1#

你可以使用async/await或promise,但不能在同一个调用中同时使用。最快的解决方法是:

try {
  const dto = await axios.post(visitURL, data, {headers})
  const data = dto.data
  console.log(data)
} catch (err) {
  console.log(error)
}
wvyml7n5

wvyml7n52#

TLDR:确保正确访问响应对象

我遇到了这个帖子,我的问题最终是因为我在对象访问中缺少了一个'.data'
我错了(I Had This Wrong)

axios
      .post(`${process.env.VUE_APP_ROOT_URL}/score/`, {'day':today})
      .then(response => {
        response.categories.forEach(element => console.log(element.score));
      })

vs正确的:

axios
      .post(`${process.env.VUE_APP_ROOT_URL}/score/`, {'day':today})
      .then(response => {
        response.data.categories.forEach(element => console.log(element.score));
      })

相关问题