現代の Web 開発では、Node.js を使用してバックエンド アプリケーションを構築することがトレンドになっています。アプリケーションは常に更新されるため、多くの場合、新しい更新バージョンをサーバーにデプロイする必要があります。したがって、この記事では、Node.js を使用して圧縮パッケージをデプロイおよびアップロードし、アプリケーションを高速、シンプル、効率的に更新する方法を紹介します。
アップロードする前に、展開するファイルを Zip または tar.gz ファイルに圧縮する必要があります。 Node.js を使用してファイル圧縮を完了するのは非常に簡単で、Node.js の組み込みの「zlib」モジュールと「fs」モジュールを使用するだけで簡単にファイル圧縮を実現できます。以下は単純な圧縮コードです:
const fs = require('fs'); const zlib = require('zlib'); const srcFileName = 'srcFile.txt'; const destFileName = 'srcFile.txt.gz'; // 创建压缩流 const gzip = zlib.createGzip(); const inp = fs.createReadStream(srcFileName); const out = fs.createWriteStream(destFileName); inp.pipe(gzip).pipe(out); console.log('文件压缩成功!');
将来使用するために、上記のコードを関数にカプセル化できます:
const fs = require('fs'); const zlib = require('zlib'); function compress(file) { const gzip = zlib.createGzip(); const src = fs.createReadStream(file); const dest = fs.createWriteStream(file + '.gz'); src.pipe(gzip).pipe(dest); console.log(`文件 ${file} 压缩成功!`); }
ここで、「file」は圧縮する必要があるファイルの名前です。 、相対パスまたは絶対パスを指定できます。
ファイルの圧縮が完了したら、圧縮ファイルをサーバーにアップロードする必要があります。ここでは、サードパーティのモジュールを使用してファイルのアップロード機能を実装できます。一般的に使用されるモジュールは「formidable」です。これは、ファイルのアップロード操作の処理に役立つ効率的なフォーム解析モジュールです。
まず、「formidable」をインストールする必要があります:
npm install formidable --save
次に、次のコードを使用してファイル アップロード機能を実装できます:
const http = require('http'); const formidable = require('formidable'); const fs = require('fs'); http.createServer((req, res) => { if (req.url === '/upload' && req.method.toLowerCase() === 'post') { const form = formidable({ multiples: true }); form.parse(req, (err, fields, files) => { const oldPath = files.file.path; const newPath = __dirname + '/uploads/' + files.file.name; fs.rename(oldPath, newPath, (err) => { if (err) throw err; res.writeHead(200, { 'content-type': 'text/plain' }); res.end('文件上传成功!'); }); }); return; } }).listen(8080); console.log('服务器启动成功!');
上記に示すようにコードでは、ポート 8080 でリッスンする HTTP サーバーを作成します。クライアントが URL「/upload」で POST リクエストをリクエストすると、「formidable」を使用して POST リクエスト内のファイル データを解析します。解析後、ファイル名、ファイルサイズ、ファイルタイプなど、アップロードされたファイルに関する関連情報を取得できます。次に、ファイルを一時パスからアップロード ディレクトリに移動します。
「強力な」解析を使用する場合、複数のファイルのアップロードをサポートするには「multiples」を true に設定する必要があることに注意してください。他のパラメータを設定することで、アップロードされるファイルのサイズ、保存パスなどを制御することもできます。
サーバーが圧縮ファイルを受信したら、更新操作を開始する前にファイルを解凍する必要があります。 Node.js を使用したファイルの解凍も非常に簡単で、Node.js の組み込みの「zlib」および「fs」モジュールを使用するだけです。以下は、単純な解凍コードの実装です:
const fs = require('fs'); const zlib = require('zlib'); const srcFileName = 'srcFile.txt.gz'; const destFileName = 'srcFile.txt'; // 创建解压流 const gunzip = zlib.createGunzip(); const inp = fs.createReadStream(srcFileName); const out = fs.createWriteStream(destFileName); inp.pipe(gunzip).pipe(out); console.log('文件解压成功!');
圧縮関数と同様に、将来の使用のために上記のコードを関数にカプセル化することもできます:
const fs = require('fs'); const zlib = require('zlib'); function uncompress(file) { const gunzip = zlib.createGunzip(); const src = fs.createReadStream(file); const dest = fs.createWriteStream(file.replace('.gz', '')); src.pipe(gunzip).pipe(dest); console.log(`文件 ${file} 解压成功!`); }
「ファイル」は次の名前です。解凍する圧縮ファイル。相対パスまたは絶対パスを指定できます。
解凍が完了したら、アプリケーションが実行されているディレクトリにファイルを移動し、元のアプリケーション ファイルを上書きして、アップデートをデプロイできます。一発で完成です。以下は、単純なコード実装です。
const fs = require('fs'); const path = require('path'); const appDir = 'app'; function deploy(file) { const fileName = path.basename(file); const destPath = path.join(appDir, fileName); fs.copyFile(file, destPath, (err) => { if (err) throw err; console.log(`文件 ${fileName} 部署成功!`); }); }
「ファイル」は、展開する必要がある解凍されたファイル名で、相対パスまたは絶対パスを指定できます。 appDir
は、アプリケーションが実行されるディレクトリです。
最後に、コードを上記の完全な関数と統合します。
const http = require('http'); const formidable = require('formidable'); const fs = require('fs'); const path = require('path'); const zlib = require('zlib'); const appDir = 'app'; http.createServer((req, res) => { if (req.url === '/upload' && req.method.toLowerCase() === 'post') { const form = formidable({ multiples: true }); form.parse(req, (err, fields, files) => { const oldPath = files.file.path; const newPath = __dirname + '/' + files.file.name; fs.rename(oldPath, newPath, (err) => { if (err) throw err; console.log('文件上传成功!'); uncompress(newPath); }); }); return; } res.writeHead(200, { 'Content-Type': 'text/html' }); res.end(` <form action="/upload" method="POST" enctype="multipart/form-data"> <input type="file" name="file" multiple> <button type="submit">上传</button> </form> `); }).listen(8080); console.log('服务器启动成功!'); function compress(file) { const gzip = zlib.createGzip(); const src = fs.createReadStream(file); const dest = fs.createWriteStream(file + '.gz'); src.pipe(gzip).pipe(dest); console.log(`文件 ${file} 压缩成功!`); } function uncompress(file) { const gunzip = zlib.createGunzip(); const src = fs.createReadStream(file); const dest = fs.createWriteStream(file.replace('.gz', '')); src.pipe(gunzip).pipe(dest); console.log(`文件 ${file} 解压成功!`); deploy(file.replace('.gz', '')); } function deploy(file) { const fileName = path.basename(file); const dest = path.join(appDir, fileName); fs.copyFile(file, dest, (err) => { if (err) throw err; console.log(`文件 ${fileName} 部署成功!`); }); }
上記のコードは、単純なファイルのアップロードと圧縮、解凍を実装します。 、展開機能は独自のニーズに応じてカスタマイズできます。
以上がnodejsデプロイメントの圧縮パッケージのアップロードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。