2017-08-31 4 views
0

nodeqをmqttで使用してパッケージをインストールして更新するクライアントを作成しようとしています。私はデータ転送とアーカイブのすべての機能をテストしましたが、私がWindows環境に来て実際にいくつかのスクリプトを実行しようとしたとき、私はいくつかの奇妙なエラーに遭遇しました。ノードjsの奇妙な振る舞い/解凍された内容のexec

誰かがダウンロードしたコンテンツをディスクに書き込む方法を誰にでも見せるためにいくつかのコードを追加しますが、まずは動作を説明します。 MQTTから

  • ダウンロードコンテンツ(作品)
  • バッファー作成し、それからのストリームをディスクに(作品)
  • 解凍ストリーム(作品)
  • 実行バッチ:各itterationのために取ら

    手順ダウンロードしたコンテンツのジョブ(奇妙なことが起こる)

  • 別のバッチジョブを実行する(見知らぬ人も)

変わったこと:まず、spawn/execレスポンスをerror spawn cmd.exe ENOENTで試してみましょう。ただし、2回目の試行(トピックのサブスクリプションによってトリガーされます)では、そのステージを超えます。 EBUSY: resource busy or locked, open C:\[email protected]\nssm.exe'ファイルのダウンロードと抽出に

コードバッチ・ジョブからnssm.exeと呼ばれている:

const debug = require('debug')('service-manager:functions:download') 
const serviceBus = require('../helpers/mqtt-helper.js') 
const stream = require('stream') 
const unzip = require('unzip-stream') 

module.exports = (service, to, from) => { 
    debug(`Downloading ${service}@${to}`) 
    return serviceBus.getFromBus(`service_manager/${service}/${to}`) 
    .then(data => { 
     debug(`Downloaded ${service}@${to}`) 
     return new Promise((resolve, reject) => { 
     debug(`Unzipping ${service}@${to}`) 
     const buffer = Buffer.from(data) 
     const bufferStream = new stream.PassThrough() 
     bufferStream.end(buffer) 
     bufferStream.pipe(unzip.Extract({ 
      path: `${__dirname}/../../services/active/${service}@${to}` 
     })).on('finish', resolve) 
     }).then(() => { 
     debug(`Unzipped ${service}@${to}`) 
     }) 
    }) 
} 

コードは、バッチジョブを実行するために使用される。しかし、最初のバッチ・ジョブが副業を渡す次のitterationは、エラーが返されます

答えて

0

distにファイルが書き込まれる前に、unzip-streamがfinishとcloseイベントを呼び出すと、ファイルがバッチスクリプトで実行できなくなってしまいました。私はライブラリを交換し、それは働いた。