我正在使用NUXT通过graphql进行服务器端渲染。对于graphql请求,我正在使用apollo-boost。在SPA模式下一切正常,但是当我将NUXT设置为通用模式(SSR模式)时。然后,仅在刷新时出现此Network error: Unexpected token < in JSON at position 0 error
错误。
从我搜索过的内容来看,此问题是由返回html而不是JSON的请求引起的。但是我检查了后端服务器,并在发生此错误时根本没有任何请求。
这是设置apollo-boost(graphql.js)的代码:
import ApolloBoost from 'apollo-boost';
import fetch from 'node-fetch';
import Cookie from 'js-cookie';
console.log({ uri: `${process.env.BACKEND_URL}/graphql` });
export default new ApolloBoost({
uri: `${process.env.BACKEND_URL}/graphql`,
fetch,
request: async ({ variables: { token }, setContext }) => {
console.log('request');
if (process.client) token = Cookie.get('mannacea_token');
setContext({
headers: {
authorization: token ? `Bearer ${token}` : ''
}
});
}
});
这是Store,action(category.js)中的示例代码:
async fetchAll({ commit }) {
try {
console.log('category fetchall');
let result = await client.query({
query: gql`
query categories {
categories {
id
name {
ko
en
ru
}
archived
}
}
`
});
console.log({ result });
let {
data: { categories }
} = result;
commit('setAll', categories);
} catch (e) {
console.error(e);
throw e;
}
},
最后是在此处调用动作的位置(category.vue):
fetch({ store }) {
Promise.all([
store.dispatch("category/fetchAll"),
store.dispatch("post/fetchAll")
]);
},
当我console.log时,我得到以下日志:
{ 12:18:12
uri: 'http://localhost:3000/graphql'
} '(repeated 1 times)'
category fetchall 12:18:12
request
然后发生错误
WARN [Network error]: ServerParseError: Unexpected token < in JSON at position 0 12:18:12
ERROR Network error: Unexpected token < in JSON at position 0
通过这种方式,类别请求不需要任何身份验证。从控制台日志来看,该错误似乎是在apollo向后端请求之前发生的。我怀疑graphql.js中的阿波罗设置有问题。