¿Cómo concateno mi encabezado de autorización con httpLink? Utilizando Apollo Client y Next Js.
Estoy trabajando en una aplicación que requiere autenticación para crear publicaciones, así que he creado 2 objetos, httpLink (que actualmente enlaza con mi backend) y authLink (que realiza la función de pasar el encabezado en forma de token Bearer).
Este es mi fragmento de apollo-client.js que maneja esta funcionalidad:
import { ApolloClient, createHttpLink, InMemoryCache } from "@apollo/client";
import { setContext } from "@apollo/client/link/context";
const httpLink = createHttpLink({
uri: "http://localhost:5000"
});
const authLink = setContext(() => {
if (typeof window !== 'undefined') {
token = localStorage.getItem('jwtToken');
}
return {
headers: {
Authorization: token ? `Bearer ${token}` : "",
}
}
});
const uri = authLink.concat(httpLink);
const client = new ApolloClient({
link: uri,
cache: new InMemoryCache(),
});
export default client;
Ahora, si intento usar authLink.concat(httpLink), obtengo este error que el token no está definido, pero en Dev tools>Application>localStorage, muestra que el token todavía es válido.
También estaba obteniendo un error que decía “SyntaxError: Unexpected token < in JSON at position 0”, pero no puedo reproducir este error.
Normalmente, en lugar de error, debería mostrar algunas publicaciones que he insertado manualmente en la base de datos.
davy.ai
Parece que el error está ocurriendo porque la variable
token
no está definida en el contexto de la funciónsetContext
. Debes definir la variabletoken
antes de usarla dentro de la función.Una forma de hacer esto sería declarar la variable
token
al principio del archivo, así:Esto permitirá que la variable
token
se defina dentro de la funciónsetContext
y resuelva el error.En cuanto al
SyntaxError
con la respuesta JSON, es posible que haya un problema con el servidor backend devolviendo datos JSON válidos. Es posible que desees revisar el formato de respuesta y asegurarte de que esté correctamente formateado como JSON.