Node.js是一個非常流行的服務器端運行環境,它使用JavaScript編寫,可以讓開發者使用相同的編程語言進行前后端開發。Node.js的高效性和靈活性使得它成為了Web開發中的一個重要組成部分。在本文中,我們將學習如何使用Node.js來搭建一個簡單的文件管理系統。
為了實現這個功能,我們需要使用Node.js的基本模塊fs(file system)和http來創建一個web服務器。首先需要在命令行運行“npm init”命令生成一個package.json文件,然后通過“npm install –save express body-parser ejs multer fs”安裝所需依賴包。
首先,我們將創建一個Node.js文件,命名為app.js。在代碼中,我們先引入必要的模塊和中間件:
const express = require('express'); const bodyParser = require('body-parser'); const multer = require('multer'); const fs = require('fs'); const ejs = require('ejs'); const app = express();
登錄后復制
這里我們使用了express框架、body-parser中間件和multer中間件來處理文件上傳功能,ejs模板引擎來渲染頁面。
接著,我們需要設置靜態資源路由:
app.use(express.static(__dirname + '/public'));
登錄后復制
這里我們將項目的靜態文件放置在public文件夾下。
我們還需要使用body-parser中間件來處理POST請求:
app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false }));
登錄后復制
接下來,我們將創建一個路由來處理文件上傳和下載的請求:
//上傳文件的路由 app.post('/upload', upload.single('file'), (req, res) => { res.redirect('/'); }); //下載文件的路由 app.get('/download/:filename', (req, res) => { const { filename } = req.params; const filePath = `${__dirname}/uploads/${filename}`; res.download(filePath); });
登錄后復制
這里使用了multer來處理文件上傳,使用res.download()方法來下載文件。
最后,我們創建一個路由來渲染頁面:
app.get('/', (req, res) => { const filesPath = `${__dirname}/uploads`; const data = fs.readdirSync(filesPath); res.render('index', { files: data }); });
登錄后復制
這里我們讀取uploads文件夾下的所有文件,并將它們渲染到模板文件中。
接著,我們需要創建一個index.ejs模板文件來展示文件列表和上傳文件的表單:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>File Manager</title> </head> <body> <h1>Files List:</h1> <% for (let i = 0; i < files.length; i++) { %> <p><a href="/download/<%= files[i] %>"><%= files[i] %></a></p> <% } %> <hr> <h2>Upload File:</h2> <form method="post" action="/upload" enctype="multipart/form-data"> <input type="file" name="file"> <button type="submit">Upload</button> </form> </body> </html>
登錄后復制
這里我們使用了EJS語法來動態生成文件列表,同時使用HTML表單來上傳文件。
最后,我們啟動服務器:
app.listen(3000, () => { console.log('App listening on port 3000!'); });
登錄后復制
現在我們完成了使用Node.js搭建一個簡單的文件管理系統,可以通過在瀏覽器中訪問http://localhost:3000來查看效果。
完整代碼如下:
const express = require('express'); const bodyParser = require('body-parser'); const multer = require('multer'); const fs = require('fs'); const ejs = require('ejs'); const app = express(); //設置靜態資源路由 app.use(express.static(__dirname + '/public')); //設置body-parser中間件 app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); //設置存儲文件的位置和文件名 const storage = multer.diskStorage({ destination: (req, file, cb) => { cb(null, 'uploads'); }, filename: (req, file, cb) => { const { originalname } = file; cb(null, originalname); } }); const upload = multer({ storage }); //上傳文件的路由 app.post('/upload', upload.single('file'), (req, res) => { res.redirect('/'); }); //下載文件的路由 app.get('/download/:filename', (req, res) => { const { filename } = req.params; const filePath = `${__dirname}/uploads/${filename}`; res.download(filePath); }); //渲染頁面的路由 app.get('/', (req, res) => { const filesPath = `${__dirname}/uploads`; const data = fs.readdirSync(filesPath); res.render('index', { files: data }); }); //設置模板引擎和模板文件夾位置 app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); //啟動服務 app.listen(3000, () => { console.log('App listening on port 3000!'); });
登錄后復制
到此為止,我們已經完成了使用Node.js搭建一個簡單的文件管理系統的過程,通過這個例子,可以更好地理解Node.js的基本模塊和中間件的使用方式。