Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Failed to parse URL from /api/session

Olá pessoal. Estou tentando fazer uma requisição à rota /api/session dentro da função getServerSideProps, na página AuthPageSSR, mas toda hora o sistema me retorna um erro Failed to parse URL from /api/session.

Procurei na internet, e vi que, por se tratar de uma função que já é executada no lado do servidor, eu não preciso passar a rota relativa e posso acessar diretamente a função .handler da api.

Tentei fazer isso, mas fiquei com dúvida na hora de passar os parametros req e res que a função .handler() espera.

Podem me ajudar?

fronte: https://stackoverflow.com/questions/74966208/next-js-typeerror-failed-to-parse-url-from-api-projects-or-error-connect-econ

Obrigado

2 respostas
solução!

Oi Henrique, tudo bem?

Aparentemente, você está tentando acessar diretamente a função handler da API, o que é uma abordagem válida. No entanto, você está com dúvidas sobre como passar os parâmetros req e res para essa função.

No contexto do Next.js, a função getServerSideProps é executada no servidor, portanto, ela tem acesso aos objetos req (request) e res (response) do Node.js. Você pode passar esses objetos como argumentos para a função handler da API.

Aqui está um exemplo de como você pode fazer isso:

import { handler } from '/caminho/para/o/arquivo/api/session';

export async function getServerSideProps(context) {
  const { req, res } = context;
  
  // Aqui você pode passar req e res para a função handler
  const resultado = await handler(req, res);
  
  // Você pode então retornar o resultado como propriedades para o seu componente
  return {
    props: {
      resultado,
    },
  };
}

Nesse exemplo, importamos a função handler do arquivo onde ela está definida e a chamamos dentro da função getServerSideProps, passando req e res como argumentos.

Essa é uma sugestão de como resolver o problema e pode ser que você precise adaptá-la ao seu código específico.

Um abraço e bons estudos.

Bom dia Lorena, obrigado pela resposta! Ela me ajudou, pois consegui fazer a requisição para a função handler. Abaixo, minha função handler.

export default async function handler(req, res) {
    const authHeader = req.headers['x-authorization'] || req.headers['authorization'] || '';
    const token = authHeader?.split(' ')[authHeader?.split(' ').length - 1];

    if (!token) return res.status(401).json({ error: { status: 401, message: 'You don\'t have credentials' } });

    try {
        await tokenService.validateAccessToken(token);
        const decodedToken = await tokenService.decodeToken(token);

        const user = await UserRepository.getUserById(decodedToken.sub);
        
        if (user === null) {
            res.status(401).json({
                error: {
                    status: 401,
                    message: 'Invalid access token, please login again.',
                }
            });
        }
        
        res.status(200).json({
            data: {
                user: {
                    username: user.name,
                    email: user.email,
                },
                id: decodedToken.sub,
                roles: decodedToken.roles,
            }
        });
        

    } catch (err) {
        console.log(err)
        res.status(401).json({
            status: 401,
            message: 'Your access token is not valid, so you are not able to get a session.',
        });
    }
}