Node.js Cron作业与日期对象冲突

Node.js Cron作业与日期对象冲突,node.js,cron,express,Node.js,Cron,Express,我正在尝试安排几个cron作业,为我的web应用程序中的不同实体生成序列号。然而,我遇到了这个问题,当我循环每个表时,它说它与date.js有关。我没有对约会对象做任何事?无论如何,在这个阶段不会。有两种猜测是,cron对象在其代码中执行日期操作,并且正在引用date.js。我正在使用date.js来访问诸如ISO date之类的内容 for (t in config.generatorTables) { console.log("t = " + config.generatorTabl

我正在尝试安排几个cron作业,为我的web应用程序中的不同实体生成序列号。然而,我遇到了这个问题,当我循环每个表时,它说它与date.js有关。我没有对约会对象做任何事?无论如何,在这个阶段不会。有两种猜测是,cron对象在其代码中执行日期操作,并且正在引用date.js。我正在使用date.js来访问诸如ISO 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();
            });
        }
    });
}
这是我检查server.js.logs\0.txt文件时收到的错误消息:

C:\node\w\WebRole1\public\javascripts\date.js:56 onsole.log('isDST');返回此.toString().match(/(E | C | M | P)(S | D)T/)[2]=“D” ^ TypeError:无法读取null的属性“2” 在Date.isDST(C:\node\w\WebRole1\public\javascripts\Date.js:56:110) 在Date.getTimezone(C:\node\w\WebRole1\public\javascripts\Date.js:56:228) at Object.\u getNextDateFrom(C:\node\w\WebRole1\node\u modules\cron\lib\cron.js:88:30) 在Object.sendAt(C:\node\w\WebRole1\node\u modules\cron\lib\cron.js:51:17) 在Object.getTimeout(C:\node\w\WebRole1\node\u modules\cron\lib\cron.js:58:30) 在Object.start(C:\node\w\WebRole1\node\u modules\cron\lib\cron.js:279:33) 在C:\node\w\WebRole1\server.js:169:46 在Object.generateNewNumbers(C:\node\w\WebRole1\utils\manageSerialNumbers.js:106:5) 在C:\node\w\WebRole1\server.js:168:45 在C:\node\w\WebRole1\node\u modules\azure\lib\services\table\tableservice.js:485:7

我在database.js文件中使用这一行:

需要(“../public/javascripts/date”)

因为date.js是全局的,所以我只需要做一次,对吗?也就是说,它有一系列内置日期对象的原型(扩展)

在manageSerialNumbers.js中,我只是在做一个回调,它们的代码没有执行,因为我已经全部注释掉了,但是仍然收到这个错误

任何帮助或建议都将不胜感激

好的,我已经注释掉了date.js模块,现在我发现这个错误:

您指定了时区,但未包括
时间
模块。时区功能已禁用。请安装
时间
模块以在应用程序中使用时区

当我检查cron.js模块时,它的顶部有以下语句:

var CronDate = Date;
try {
  CronDate = require("time").Date;
} catch(e) {
  //no time module...leave CronDate alone. :)
}
那么这会得出结论,它确实与date.js模块有关

有人知道怎么了


cheers

我使用了date.js一段时间,然后意识到Node.js/V8中的date对象已经有了ISO支持、输入和输出,date.js只添加了一个非常特定的边缘大小写。你到底需要date.js做什么

如果您确实需要date.js

因为date.js是全局的,所以我只需要做一次,对吗

只要代码在同一进程中运行,这是正确的。我不熟悉Azure上的Node.js,也不熟悉提供您正在使用的
cronJob
方法的库,但也许它会产生一个新的进程,它有自己的V8实例,然后您会丢失日期对象更改?(因此,
需要在该代码中再次使用它。)