特殊字符

时间:2019-05-02 16:50:11

标签: node.js express

当我从html输入向节点后端发送特殊的西班牙语字符(ñ,ó,á,í)时,我的应用出现问题

我尝试对字段“ direccion”进行编码,这是我从html表单发送到节点路由的字符串,但是每当我发送带有特殊字符的direccion时,应用就会崩溃

这是我的app.js文件,我像这样启动应用程序:节点应用程序

//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)

0 个答案:

没有答案