jueves, 15 de junio de 2017

Cannot read property of undefined javascript

Cannot read property of undefined javascript // No se puede leer propiedad de undefined javascritp


Trabajando con objetos en Javascrip para AngularJS me encontré con el problema de las propiedades de objetos vacíos, es decir, si tengo algo como:

$scope.auto = {};

if($scope.auto.color == "rojo")
{..}

me resultará el error: cannot read color of undefined dado que en realidad no la tiene.

Por esta razón, debemos validar antes que de verdad tenga una propiedad definida.

Si ponemos algo como:

if($scope.auto.color != "undefined")
o
 if($scope.auto.color != undefined)
o
 if(typeof($scope.auto.color) != undefined)

el error persistirá dado que para comparar solicitamos de nueva cuenta la propiedad pero esta no existe, por lo tanto sólo basta con preguntar si simplemente existe y eso quedaría algo así:

if($scope.auto.color)
{..}

y listo. Intersando ¿no?

De esta manera primero nos aseguramos que haya algo qué comparar para después proceder. Si necesitas un if de cualquiera forma, anídalo a esta comparación y así te aseguras de esquivar tal error.  


405 method not allowed” for "PUT" method

Me encuentro desarrollando una aplicación #AngularJS que llama un API de .Net.
Todo iba bien hasta que mi "UPDATE" empezó a darme problemas, lo cual era bastante raro pues no recuerdo haber cambiado alguna configuración o similares. Dado que era un trabajo colaborativo hice mi respectivo "commit and push" para verificar si sólo me pasaba a mí así que procedí y en efecto, sólo me pasaba a mí;  <sarcasmo>¡Qué raro!</sarcasmo> 

Unos de mis compañeros lo corrió en su maquina y todo funcionaba bien pero dado que yo estaba desarrollando esa parte era necesario que arreglara mi asunto para continuar así que se nos ocurrió la idea de que usara su versión y eliminar la mía por si había algo en el código de las configuraciones mías que afectara, respaldé claro.

Una vez con la "nueva y correcta versión" hice las pruebas pertinentes pero no, no funcionó.
<sarcasmo>¡Qué sorpresa!</sarcasmo> 

Leyendo un poco supe que hay ciertas configuraciones que suelen afectar los verbos en la conexión, así que verifiqué las configuraciones del IIS pero en realidad no había mucho que activar o cambiar. Por lo poco que hice reincié con esperanza y al intentar de nuevo no funcionó sin embargo recordé que en el Web config puedes dar ciertas instrucciones para que tu aplicación evite o agregue "funcionamientos" que no debieran afectar otras aplicaciones. Por lo tanto, hice una búsqueda un tanto más especifica y me topé con esto:

<system.webServer>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
    <handlers>
        <remove name="WebDAV" />
    </handlers>
</system.webServer>
Santo remedio. Pude hacer un "PUT" sin novedad y así seguir con mis siguientes bugs, uno de los cuales eran los "undefined's".

Investigué un poco acerca del WebDAV y pude ver que es algo un tanto importante así que si no sabes del tema no estaría de más una vuelta por Wikipedia.

Solución: 

Agrega esas líneas a tus  Web configs y que la fuerza te acompañe.