0

Web アプリ内のさまざまなエンティティのシリアル番号を生成するために、いくつかの cron ジョブをスケジュールしようとしています。しかし、私はこの問題に直面しています。各テーブルをループしていると、date.js と関係があると表示されます。私は日付オブジェクトで何もしていませんか? とにかく、この段階ではありません。いくつかの推測は、cron オブジェクトがそのコードで日付処理を行っており、date.js を参照していることです。ISO日付などにアクセスするためにdate.jsを使用しています。

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'); return this.toString().match(/(E|C|M|P)(S|D)T/)[2] == "D" ^ TypeError: Date.isDST で null のプロパティ '2' を読み取れません(C:\node\w\WebRole1\public\javascripts\date.js:56:110) Date.getTimezone で (C:\node\w\WebRole1\public\javascripts\date.js:56:228) オブジェクトで._getNextDateFrom (C:\node\w\WebRole1\node_modules\cron\lib\cron.js:88:30) Object.sendAt (C:\node\w\WebRole1\node_modules\cron\lib\cron.js: 51:17) Object.getTimeout (C:\node\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:

database.js ファイルで次の行を使用しています。

require('../public/javascripts/date');

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 モジュールと関係があると結論付けますか?

誰でも何が悪いのか分かります。

乾杯

4

1 に答える 1

0

しばらくの間、date.js を使用していましたが、Node.js/V8 の Date オブジェクトには既に ISO のサポート、入出力があり、Date.js は非常に特殊なエッジ ケースのみを追加していることに気付きました。date.js は正確には何のために必要ですか?

date.jsが必要な場合...

date.js はグローバルなので、これを一度だけ行う必要があるのは正しいですか?

コードが同じプロセスで実行されている限り、これは当てはまります。私は Azure 上の Node.js や、cronJob使用しているメソッドを提供するライブラリに精通していませんが、独自の V8 インスタンスを持つ新しいプロセスを生成し、Date オブジェクトの変更を失う可能性がありますか? (そのrequireコードでも同じです。)

于 2012-07-11T21:22:55.953 に答える