3ENGINE

Programación y otros cachivaches

Etiqueta: javascript

Página 2/2

Tecnologia

node.js: codificación correcta de caracteres de un HTTP response


Si en node.js definimos el siguiente callback para dar respuesta a una petición HTTP

var server = http.createServer(function (request, response) {
  response.writeHead(200);
  response.write('el niño es rápido');
  response.end();
});

Esto es lo que obtendremos en nuestro navegador Web:

el niño es rápido

Vemos que el navegador no interpreta bien ni los acentos ni la eñe de la frase. Esto pasa porque estamos incluyendo caracteres que están fueran del rango del código ASCII. El navegador necesita que en la cabecera HTTP le especifiquemos el juego de caracteres correcto. Esto se hace a través del Header HTTP Contec-Type, donde en nuestro caso le indicaremos UTF-8.

Modificamos la función:

var server = http.createServer(function (request, response) {
  res.writeHead(200, {"Content-Type": "text/html;charset=UTF-8"});
  response.write('el niño es rápido');
  response.end();
});

Y ahora el navegador Web interpreta correctamente la respuesta:

el niño es rápido

referencias:
http://nodejs.org/api/http.html
http://howtonode.org/hello-node




Tecnologia

Format y format array en javacript


Javascript, y por lo tanto node.js, no tiene nada parecido a una función format, pero se puede emular facilmente aprovechando el prototipado de javascript:

// Format emulate
String.prototype.format = function () {
  var args = arguments;
  return this.replace(/\{\{|\}\}|\{(\d+)\}/g, function (m, n) {
    if (m == "{{") { return "{"; }
    if (m == "}}") { return "}"; }
    return args[n];
  });
};

Ademas, si necesitas aplicar un format sobre un array puedes hacer esto:

// apply string format to all elements of array and return result
Array.prototype.format=function(prefix)
{
    var result = [];
    this.forEach(function(entry) {
        result.push(prefix.format(entry));
    });
    return result;
};

Ejemplo de uso

console.log("soy el numero {0}".format(1));   
// return soy el numero 1
var misNumeros = [1,2,3];
console.log(misNumeros.format("soy el numero {0}")); 
// return [ 'soy el numero 1', 'soy el numero 2', 'soy el numero 3' ]