2012-06-28 3 views
0

J'essaie de planifier plusieurs tâches cron pour générer des numéros de série pour différentes entités de mon application Web. Cependant, je suis confronté à ce problème, quand je boucle chaque table, il dit qu'il a quelque chose à voir avec date.js. Je ne fais rien avec un objet date? Pas à ce stade de toute façon. Un couple de suppositions est que l'objet cron fait une chose de date dans son code et fait référence à date.js. J'utilise date.js pour avoir accès à des choses comme la date ISO.Node.js Cron Job Messing avec l'objet Date

for (t in config.generatorTables) { 
    console.log("t = " + config.generatorTables[t] + "\n\n"); 

    var ts3 = azure.createTableService(); 
    var jobSerialNumbers = new cronJob({ 
     //cronTime: '*/' + rndNumber + ' * * * * *', 
     cronTime: '*/1 * * * * *', 
     onTick: function() { 
      //console.log(new Date() + " calling topUpSerialNumbers \n\n"); 
      manageSerialNumbers.topUpSerialNumbers(config.generatorTables[t], function() { }); 
     }, 
     start: false, 
     timeZone: "America/Los_Angeles" 
    }); 

    ts3.createTableIfNotExists(config.generatorTables[t], function (error) { 
     if (error === null) { 
      var query = azure.TableQuery 
       .select() 
       .from(config.generatorTables[t]) 
       .where('PartitionKey eq ?', '0') 

      ts3.queryEntities(query, function (error, serialNumberEntities) { 
       if (error === null && serialNumberEntities.length == 0) { 
        manageSerialNumbers.generateNewNumbers(config.maxNumber, config.serialNumberSize, config.generatorTables[t], function() { 
         jobSerialNumbers.start(); 
        }); 
       } 
       else jobSerialNumbers.start(); 
      }); 
     } 
    }); 
} 

Et voici le message d'erreur que je reçois quand j'examine le fichier server.js.logs \ 0.txt de:

C: \ noeud \ w \ WebRole1 \ javascripts public \ \ Date .js: 56 onsole.log ('isDST'); return this.toString(). match (/ (E | C | M | P) (S | D) T /) [2] == "D" ^ TypeError: Impossible de lire la propriété '2' de null at Date.isDST (C: \ noeud \ w \ WebRole1 \ public \ javascripts \ date.js: 56: 110) à Date.getTimezone (C: \ noeud \ w \ WebRole1 \ public \ javascripts \ date.js: 56: 228) à Object._getNextDateFrom (C: \ noeud \ w \ WebRole1 \ nod_modules \ cron \ lib \ cron.js: 88: 30) à Object.sendAt (C: \ node \ w \ WebRole1 \ node_modules \ cron \ lib \ cron.js: 51: 17) à Object.getTimeout (C: \ noeud \ w \ WebRole1 \ node_modules \ cron \ lib \ cron.js: 58: 30) à Object.start (C: \ node \ w \ WebRole1 \ node_modules \ cron \ lib \ cron.js: 279: 33) à C: \ node \ w \ WebRole1 \ server.js: 169: 46 à Object.generateNewNumbers (C: \ node \ w \ WebRole1 \ utils \ ma nageSerialNumbers.js: 106: 5) à l'adresse C: \ node \ w \ WebRole1 \ server.js: 168: 45 à l'adresse C: \ node \ w \ WebRole1 \ node_modules \ azure \ lib \ services \ table \ tableservice.js : 485: 7

J'utilise cette ligne dans mon fichier database.js:

require ('../ public/JavaScripts/jour);

est-ce correct que je n'ai à faire une seule fois, car date.js est global? C'est à dire. il a un tas de prototypes (extensions) pour l'objet de date intégré.

Dans manageSerialNumbers.js Je suis juste en train de faire un callback, il n'y a pas de code qui s'exécute comme je l'ai commenté, mais qui continue de recevoir cette erreur.

Toute aide ou conseil serait apprécié.

Ok je l'ai commenté le module date.js et maintenant je reçois cette erreur:

Vous avez spécifié un Timezone mais n'ai pas inclus le module time. La fonctionnalité de fuseau horaire est désactivée. Veuillez installer le module time pour utiliser les fuseaux horaires dans votre application.

Lorsque j'examine le module cron.js il a cette déclaration au sommet:

var CronDate = Date; 
try { 
    CronDate = require("time").Date; 
} catch(e) { 
    //no time module...leave CronDate alone. :) 
} 

Donc, ce serait conclure que elle a quelque chose à voir avec le module date.js?

Tout le monde voit ce qui est mal.

acclamations

Répondre

0

j'utilisais pendant un certain temps date.js, puis réalisé que l'objet Date dans Node.js/V8 avait déjà le soutien ISO, entrée et sortie et Date.js seulement ajouté un très spécifique cas de bord. De quoi avez-vous exactement besoin pour date.js?

Si vous avez besoin date.js ...

is that correct that I only have to do this once, because date.js is global?

C'est vrai aussi longtemps que le code est en cours d'exécution dans le même processus. Je ne connais pas Node.js sur Azure, ou la bibliothèque fournissant la méthode cronJob que vous utilisez, mais peut-être qu'elle engendre un nouveau processus, qui a sa propre instance V8, et que vous perdez les modifications de l'objet Date? (Donc require encore dans ce code.)