Здравствуйте, у моего приложения возникла проблема, когда я отправляю специальные испанские символы (ñ, ó, á, í) из 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)