我正在尝试安排几个cron作业,以便为我的网络应用中的不同实体生成序列号。但是我遇到了这个问题,当我循环每个表时,它说它与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:\节点\ W \ WebRole1 \公共\ Javascript角\ date.js:56 onsole.log( 'isDST'); return this.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._getNextDateFrom(C:\ node \ w \ WebRole1 \ node_modules \ cron \ lib \ cron.js:88:30) at Object.sendAt(C:\ node \ w \ WebRole1 \ node_modules \ cron \ lib \ cron.js:51:17) at Object.getTimeout(C:\ node \ w \ WebRole1 \ node_modules \ cron \ lib \ cron.js:58:30) at Object.start(C:\ node \ w \ WebRole1 \ node_modules \ cron \ lib \ cron.js:279:33) 在C:\ node \ w \ WebRole1 \ server.js:169:46 at Object.generateNewNumbers(C:\ node \ w \ WebRole1 \ utils \ manageSerialNumbers.js:106:5) 在C:\ node \ w \ WebRole1 \ server.js:168:45 在C:\ node \ w \ WebRole1 \ node_modules \ azure \ lib \ services \ table \ tableservice.js:485:7
我在我的database.js文件中使用此行:
要求( '../公共/ Javascript角/日期');
是正确的,我只需要这样做一次,因为date.js是全局的吗?即它有一堆内置日期对象的原型(扩展)。
在manageSerialNumbers.js中,我只是在进行回调,它们没有执行代码,因为我已经对它进行了全部注释,但仍然收到此错误。
任何帮助或建议都将不胜感激。
好的我已经注释掉了date.js模块,现在我收到了这个错误:
您指定了时区但未包含time
模块。时区功能已禁用。请安装time
模块以在您的应用程序中使用时区。
当我检查cron.js模块时,它在顶部有这个声明:
var CronDate = Date;
try {
CronDate = require("time").Date;
} catch(e) {
//no time module...leave CronDate alone. :)
}
那么这会得出结论,它确实与date.js模块有关吗?
任何人都看错了。
欢呼声
答案 0 :(得分:0)
我正在使用date.js一段时间,然后意识到Node.js / V8中的Date对象已经有ISO支持,输入和输出,而Date.js只添加了一个非常特殊的边缘情况。你究竟需要date.js到底是什么?
如果你确实需要date.js ......
是正确的,我只需要这样做一次,因为date.js是全局的吗?
只要代码在同一进程中运行,那就是真的。我不熟悉Azure上的Node.js,或者提供您正在使用的cronJob
方法的库,但它可能会产生一个新进程,它有自己的V8实例,然后您丢失了Date对象的更改? (所以在代码中再次require
。)