Заголовки уже отправили ошибку в узле, когда специальные символы - PullRequest
0 голосов
/ 02 мая 2019

Здравствуйте, у моего приложения возникла проблема, когда я отправляю специальные испанские символы (ñ, ó, á, í) из html-ввода на серверную часть моего узла

Я пытался кодировать поле "direccion«Это строка, которую я отправляю из html-формы на маршрут к узлу, но всякий раз, когда я отправляю директиву со специальными символами, приложение вылетает

Вот мой файл app.js. Я запускаю приложение так: node app

//Body parser
app.use(bodyParser.urlencoded({ extended: true }));

//Habilitar la carpeta public
app.use(express.static(__dirname + '/public'));
hbs.registerPartials(__dirname + '/views/partials')
app.set('view engine', 'hbs');

app.use(require('./routes/buscar'));

const port = process.env.PORT || 3000;

app.get('/', (req, res) => {
    res.render('home', {});
})

app.post('/', (req, res) => {
    res.render('home', {});
})

app.listen(port, () => {
    console.log(`Escuchando peticiones en el puerto ${port} `);
});

это мой файл маршрута:


const getInfoHelper = async(direccion) => {

    try {

        const coords = await lugar.getLugarLatLng(direccion);
        const hour = await hora.getHoraLatLng(coords.lat, coords.lng);
        const temp = await clima.getClimaLatLng(coords.lat, coords.lng);

        let weather = {
            direccion: coords.direccion,
            hora: hour.formatted,
            hora_abbr: hour.abbreviation,
            pronostico: temp.weather[0]['description'],
            temp: temp.main.temp,
            temp_min: temp.main.temp_min,
            temp_max: temp.main.temp_max,
            presion: temp.main.pressure,
            humedad: temp.main.humidity,
            viento: temp.wind.speed,
            dviento: temp.wind.deg,
            nubosidad: temp.clouds.all
        };

        return weather;

    } catch (error) {
        return {
            ok: false,
            message: `No se pudo determinar el clima de: ${direccion} verifique la dirección indicada. ${error}`
        }
    }

}

app.post('/buscar/:dir', async function(req, res) {

    let direccion = req.params.dir;
    const resp = await getInfoHelper(direccion);

    if (resp.ok === false) {
        res.render('resultados', {
            error: true,
            message: resp.message
        });
    }

    res.render('resultados', {
        error: false,
        direccion: resp.direccion,
        hora: resp.hora,
        hora_abbr: resp.hora_abbr,
        pronostico: resp.pronostico,
        temp: resp.temp,
        temp_min: resp.temp_min,
        temp_max: resp.temp_max,
        presion: resp.presion,
        humedad: resp.humedad,
        viento: resp.viento,
        dviento: resp.dviento,
        nubosidad: resp.nubosidad
    });

});

module.exports = app;

, и вот фрагмент кода из формы, куда я отправляю данные:

<form id="myForm" onsubmit="arreglarPath()" method="post">
                    <div class="form-group">

                        <label for="dir">Indique la dirección</label>
                        <input class="form-control" type="text" autocomplete="off" placeholder="dirección" id="dir" name="dir">
                    </div>

                    <button type="submit" id="btnBuscar" name="btnBuscar" class="btn btn-primary">
                        Buscar
                    </button>
                </form>

<script>
        function arreglarPath() {
            var action_src = "/buscar/" + document.getElementsByName("dir")[0].value;
            var your_form = document.getElementById('myForm');
            your_form.action = action_src;
        }
    </script>

Как я говорил всякий раз, когдаЯ использую обычные английские или не специальные символы, приложение работает нормально, проблема в том, что когда я использую слово на испанском языке, например, «peñalolen» или «vitacúra», и символы, такие как & * $ и т. Д.

Вот ошибка:

Error [ERR_HTTP_HEADERS_SENT]: C:\Users\gorydev\Documents\Development\weather-web\views\resultados.hbs: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:471:11)
    at ServerResponse.header (C:\Users\gorydev\Documents\Development\weather-web\node_modules\express\lib\response.js:767:10)
    at ServerResponse.send (C:\Users\gorydev\Documents\Development\weather-web\node_modules\express\lib\response.js:170:12)
    at done (C:\Users\gorydev\Documents\Development\weather-web\node_modules\express\lib\response.js:1004:10)
    at C:\Users\gorydev\Documents\Development\weather-web\node_modules\hbs\lib\hbs.js:69:11
    at Object.done (C:\Users\gorydev\Documents\Development\weather-web\node_modules\hbs\lib\async.js:74:20)
    at C:\Users\gorydev\Documents\Development\weather-web\node_modules\hbs\lib\hbs.js:64:20
    at FSReqWrap.readFileAfterClose [as oncomplete] (internal/fs/read_file_context.js:53:3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...