Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

202
Visualizações
¿Por qué h.response devuelve una cadena en lugar de un objeto en HapiJS?

Estoy creando una API con HapiJS, usando TDD recibo un error porque la prueba valida el payload de la solicitud, curiosamente recibo una cadena en lugar de un objeto como dice la documentación.

Esta es mi prueba escrita con @hapi/lab:

 it('payload should be a json object', async () => { const res = await server.inject({ method: 'GET', url: '/users' }) console.log(res) expect(res.payload).to.be.object() })

y esta es mi ruta:

 server.route({ method: 'GET', path: '/users', handler: (request, h) => { const data = { message: 'App' } const response = h .response(data) .type('application/json') .header('content-type', 'application/json') .code(200) return response } })

Por cierto, ese console.log en la prueba es para confirmar el contenido de la carga res.payload y verificar que estaba recibiendo una cadena en lugar de un objeto.

Este es el error específico que recibo de la prueba: Expected '{"message":"App"}' to be an object but got 'string'

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

La propiedad que está buscando es el result del objeto de response que obtiene del método de inject .

la payload son los datos del punto final que hapi enviaría al cliente, lo que significa que se serializó. Esa es la razón por la que obtienes una cadena. En cambio, la propiedad de result son los datos sin procesar devueltos desde el punto final antes de la serialización. Puede encontrar más información en la documentación en el apartado de return .

Aquí hay un fragmento de código para mostrar esto:

 const Hapi = require("@hapi/hapi"); const server = Hapi.Server(); server.route({ method: "GET", path: "/test", options: { handler(req, h) { return { result: 1 }; }, }, }); (async function () { await server.start(); console.log("server started"); const res = await server.inject({ method: "GET", url: "/test", }); console.log(res.payload); // ==> '{"result": 1}' console.log(res.result); // ==> { result: 1 } })();

Además, para responder a uno de los comentarios que hizo, en realidad ya envió un objeto desde su servidor hapi . Es solo que los datos fueron serializados. Necesitaría deserializarlo en cualquier contexto en el que llamaría a su punto final, con JSON.parse() por ejemplo, antes de poder usarlo.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda