NodeJS 如何在graphql API调用中捕获403响应?

gfttwv5a  于 2023-01-25  发布在  Node.js
关注(0)|答案(1)|浏览(171)

我有一个服务器,它渲染组件,并在请求发出时返回HTML,而渲染服务器对特定组件进行graphql调用,有时会返回403响应。
代码:

const client = new ApolloClient({
  link: new HttpLink({
    uri: 'https://url/graphql',
    fetch,
    headers: {
      'csrf-tokens': tokens,
      Referer: header_referer,
    },
  }),
  queryDeduplication: false
)}

export const getProperties = async () => {
  try {
    await client
      .query({query, variables})
      .then((response) => {
         const data = response.data.properties;
         if(response.error) {
           throw new Error("Error encountered");
         }
       }
      .catch((error) => {
         console.log("gettProperites error")
      })
   } catch (err) {
       console.log("Execution failed")
   }
}

我在getProperties函数中调用了graphql,每当我收到403错误时,pod就会崩溃。我已经将调用封装在try-catch块中,并在. then()中添加了一个额外的if条件,以检查响应中是否存在任何错误。但是,403响应仍然没有被捕获,并导致pod崩溃。
上面的代码是我正在运行的代码的整体结构,我已经删除了一些不需要保持它小的细节。

3hvapo4f

3hvapo4f1#

尝试拦截器。我只能告诉vue,但我认为在react非常相似:

const link = createUploadLink({ uri: '/graphql' });

const errors = onError(({ networkError }) => {
    if (networkError.statusCode === 403) {
      // do something with 403 response code like:
      router.push('/403');
    }
    else {
      // do something with any other error response code
    }
  })

const apolloClient = new ApolloClient({
  link:  errors.concat(link),
  ...
})

相关问题