Dans le développement Web moderne, utiliser Node.js pour créer des applications back-end est devenu une tendance. Les applications étant constamment mises à jour, nous devons souvent déployer de nouvelles versions mises à jour sur le serveur. Par conséquent, cet article explique comment utiliser Node.js pour déployer et télécharger des packages compressés afin d'obtenir des mises à jour d'applications rapides, simples et efficaces.
Avant le téléchargement, nous devons compresser les fichiers qui doivent être déployés dans un fichier Zip ou tar.gz. Il est très simple d'utiliser Node.js pour terminer la compression de fichiers. Il vous suffit d'utiliser les modules "zlib" et "fs" intégrés de Node.js pour réaliser facilement la compression de fichiers. Ce qui suit est un simple code de compression :
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('文件压缩成功!');
Nous pouvons encapsuler le code ci-dessus dans une fonction pour une utilisation future :
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} 压缩成功!`); }
Le "fichier" est le nom du fichier qui doit être compressé, qui peut être un chemin relatif ou un chemin absolu.
Après avoir terminé la compression du fichier, nous devons télécharger le fichier compressé sur le serveur. Ici, nous pouvons utiliser des modules tiers pour implémenter la fonction de téléchargement de fichiers. Un module couramment utilisé est "formidable", qui est un module d'analyse de formulaire efficace qui peut nous aider à gérer les opérations de téléchargement de fichiers.
Tout d'abord, nous devons installer "formidable" :
npm install formidable --save
Ensuite, nous pouvons utiliser le code suivant pour implémenter la fonction de téléchargement de fichiers :
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('服务器启动成功!');
Comme le montre le code ci-dessus, nous créons un serveur HTTP avec le port d'écoute 8080 . Lorsque le client demande une requête POST avec l'URL "/upload", nous utilisons "formidable" pour analyser les données du fichier dans la requête POST. Après l'analyse, nous pouvons obtenir des informations pertinentes sur le fichier téléchargé, notamment le nom du fichier, la taille du fichier, le type de fichier, etc. Ensuite, nous déplaçons les fichiers du chemin temporaire vers le répertoire de téléchargement.
Il convient de noter que lorsque vous utilisez une analyse "formidable", vous devez définir "multiples" sur true pour prendre en charge le téléchargement de plusieurs fichiers. Nous pouvons également contrôler la taille du fichier téléchargé, le chemin de sauvegarde, etc. en définissant d'autres paramètres.
Une fois que le serveur a reçu le fichier compressé, nous devons décompresser le fichier avant de pouvoir démarrer l'opération de mise à jour. Il est également très simple de décompresser des fichiers à l'aide de Node.js. Il vous suffit d'utiliser les modules "zlib" et "fs" intégrés de Node.js. Ce qui suit est une simple implémentation de code de décompression :
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('文件解压成功!');
Identique à la fonction de compression, nous pouvons également encapsuler le code ci-dessus dans une fonction pour une utilisation future :
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} 解压成功!`); }
Le "fichier" est le nom du fichier compressé qui doit être décompressé. Est-ce un chemin relatif ou un chemin absolu.
Après avoir terminé la décompression, nous pouvons déplacer le fichier vers le répertoire où l'application est en cours d'exécution, écraser le fichier d'application d'origine, et le travail de déploiement et de mise à jour est terminé une fois. Ce qui suit est une implémentation de code simple :
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} 部署成功!`); }); }
Le "fichier" est le nom du fichier décompressé qui doit être déployé, qui peut être un chemin relatif ou un chemin absolu. appDir
est le répertoire dans lequel notre application s'exécute.
Enfin, nous avons intégré le code avec les fonctions complètes ci-dessus :
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} 部署成功!`); }); }
Le code ci-dessus implémente des fonctions simples de téléchargement, de compression, de décompression et de déploiement de fichiers, qui peuvent être personnalisées en fonction de vos propres besoins.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!