理解Express express.static 和 __direname 及 __firename的含義
一:理解 app.use(express.static(__direname + '/public'));
將靜態資原始檔所在的目錄作為引數傳遞給 express.static中介軟體就可以提供靜態資原始檔的訪問,比如在public目錄放了css,images, 和 javascript檔案,我們就可以如上的寫法。
當然我們也可以如下寫法:
app.use(express.static(path.join(__dirname, 'public')));
先看下專案的目錄結構如下:
### 目錄結構如下: demo # 工程名 | |--- public | | |---js | | | |-- index.js | | |--- index.css | | |--- index.html | |--- server.js | |--- .gitignore
server.js 程式碼如下:
var express = require('express'); var app = express(); var path = require('path'); app.use(express.static(path.join(__dirname, 'public'))); app.get('/', (req, res) => { res.send("aaa"); }); app.listen(3000, (req, res) => { console.log('app is running at port 3000'); });
使用命令列,進入專案的根目錄後,輸入命令 node server.js 後,啟動伺服器;
那麼現在我們就可以這樣訪問檔案了;
http://127.0.0.1:3000/js/index.js
http://127.0.0.1:3000/index.css
如果我們的靜態資源放在多個目錄下面,我們可以多次呼叫express.static中介軟體;如:
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'common')));
如果我們希望所有通過 express.static 訪問的檔案都存放在一個“虛擬(virtual)”目錄(即目錄根本不存在)下面,
可以通過為靜態資源目錄指定一個掛載路徑的方式來實現,如下所示:
app.use('/static', express.static(path.join(__dirname, 'public')));
那麼現在訪問資原始檔變成如下:
http://127.0.0.1:3000/static/index.css http://127.0.0.1:3000/static/js/index.js
二:理解__filename變數
在任何檔案模組內部,可以使用__filename變數獲取當前模組檔案的帶有完整路徑的檔名。
比如現在在 server.js 程式碼加入如下程式碼:
var tt = require('./js/index.js');
然後在js/index.js 程式碼加入如下程式碼:
console.log(__filename);
在專案的根目錄繼續輸入 node server.js , 在命令列中會顯示完整的路徑檔名:
/Users/tugenhua/個人demo/node0420/express-static/public/js/index.js
三: 理解__dirname變數
在任何模組檔案內部,可以使用__direname變數獲取當前模組檔案所在目錄的完整絕對路徑。操作和上面一樣,在index.js繼續加入如下程式碼:
console.log(__dirname);
如下列印結果:
/Users/tugenhua/個人demo/node0420/express-static/public/js