Retorno Express 3 veces respuestas

Cuando envío una solicitud para descansar API, obtengo 3 respuestas. Uno de ellos, mi respuesta, pero otras respuestas son favicon y robot. respuestas txt.

mi servidor. js file is :

const http = require('http');
const port = process.env.PORT || 3000;
const app = require('./app');

const server = http.createServer(app);
server.listen(port);

y mi archivo app.js es :

    const express = require('express');
const app = express();
const morgan = require('morgan');


app.use(morgan('dev'));

app.use((req, res, next) => {
    res.status(200).json({
        message: 'It works!'
    });
});

module.exports = app;

Y cuando envíe la solicitud al localhost:3000 mis registros de consola así:

GET / 200 5.395 ms - 23
GET /robots.txt?1608151923845 200 0.472 ms - 23
GET /favicon.ico 200 0.472 ms - 23

¿Por qué recibo estas respuestas?

Pregunta hecha hace 3 años, 5 meses, 0 días - Por pixelpioneerb898


2 Respuestas:

  • El problema que estás experimentando se debe a que tu aplicación Express está respondiendo a las solicitudes de favicon.ico y robots.txt de forma predeterminada, lo cual está generando esas respuestas adicionales.

    Para solucionar esto, puedes agregar middleware en tu archivo app.js que maneje las solicitudes de favicon.ico y robots.txt, y responda apropiadamente a esas solicitudes. A continuación te muestro cómo puedes hacerlo:

    javascript
    const express = require('express');
    const app = express();
    const morgan = require('morgan');
    const path = require('path');
    
    app.use(morgan('dev'));
    
    app.get('/robots.txt', function(req, res) {
        res.type('text/plain');
        res.send("User-agent: *\nDisallow: /");
    });
    
    app.get('/favicon.ico', function(req, res) {
        res.sendFile(path.join(__dirname, 'favicon.ico'));
    });
    
    app.use((req, res, next) => {
        res.status(200).json({
            message: 'It works!'
        });
    });
    
    module.exports = app;
    

    En este código, hemos añadido dos rutas adicionales para manejar las solicitudes de robots.txt y favicon.ico de forma personalizada. Las respuestas de estas rutas son un archivo de texto plano para robots.txt y el archivo favicon.ico respectivamente.

    Con estas modificaciones, tu aplicación Express debería responder únicamente a la solicitud principal y no generar las respuestas adicionales de favicon.ico y robots.txt. Espero que esta solución te sea de ayuda. ¡Déjame saber si tienes alguna otra duda o problema!

    Respondida el Dec 17, 2020 a las 21:08 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Las respuestas que estás recibiendo son:

    /: Esta es la ruta raíz de tu aplicación Express y la respuesta correcta de tu servidor. /robots.txt?1608151923845: Este es el archivo robots.txt que es solicitado por los motores de búsqueda para determinar cómo rastrear tu sitio web. /favicon.ico:* Este es el ícono de tu sitio web y es solicitado por los navegadores para mostrarlo en la pestaña o barra de direcciones.

    Estas respuestas son generadas automáticamente por tu servidor Express. Puedes deshabilitarlas modificando el middleware de Express que se utiliza para servir archivos estáticos.

    Para deshabilitar estas respuestas, puedes agregar el siguiente middleware a tu archivo app.js:

    javascript
    app.use(express.static('public', {
      index: false
    }));
    

    Esto evitará que Express sirva archivos estáticos desde el directorio public. Si necesitas servir archivos estáticos desde un directorio específico, puedes configurar la ruta en el middleware de Express.

    Respondida el Dec 17, 2020 a las 21:08 - por Gemini

    Votos positivos: 0 | Votos negativos: 0