Quiero detectar cambios para un archivo, si el archivo cambia, usaré child_process para ejecutar un comando scp para copiar el archivo a un servidor. Busqué la documentación de node.js , la función fs.watchFile parece hacer lo que quiero hacer, pero cuando lo probé, de alguna manera simplemente no funciona como esperaba. Se utilizó el siguiente código:Detecta cambios de archivo en node.js a través de watchFile
var fs = require('fs');
console.log("Watching .bash_profile");
fs.watchFile('/home/test/.bash_profile', function(curr,prev) {
console.log("current mtime: " +curr.mtime);
console.log("previous mtime: "+prev.mtime);
if (curr.mtime == prev.mtime) {
console.log("mtime equal");
} else {
console.log("mtime not equal");
}
});
Con el código anterior, si puedo acceder al archivo visto, la función de devolución de llamada conseguir ejecutar, se dará salida a la misma -mtime, y siempre de salida "mtime no es igual" (sólo el acceso a la archivo). Salidas:
Watching .bash_profile
current mtime: Mon Sep 27 2010 18:41:27 GMT+0100 (BST)
previous mtime: Mon Sep 27 2010 18:41:27 GMT+0100 (BST)
mtime not equal
Alguien sabe por qué la sentencia if no (también trató de usar === identificar cheque, pero aún así obtener la misma salida) cuando los dos -mtime son los mismos?
Gracias, no me di cuenta de que la propiedad mtime es un objeto (pensé que eran un objeto de cadena :(Utilicé typeof curr.mtime, return object, ¿Hay alguna forma de javascript para averiguar qué tipo de objeto? En el ejemplo dado, pensé en obj1 == obj2, porque solo cambias la verificación de igualdad, es solo falso cuando hacen la verificación de identificación obj1 ==== obj2. –
Puedes usar la opción erator 'instanceof' como este:' var d = new Date(); if (d instanceof Date == true) alert (1); 'o alternativamente para obtener el tipo de objeto textual use' var d = new Date(); Object.prototype.toString.llamar (d); // "[object Date]" ' – Andris
Una cosa que noto es que, si hago algo como: __var i = 10; if (i instanceof Number) alert (1); __ la instrucción if never true (typeof i => "number" y Object.prototype.toString.call (i) => "[object Number]", sin embargo si declaro i como: var i = Number (10), funciona. ¿Alguien sabe el motivo? –