理解Express express.static 和 __direname 及 __firename的含義


理解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

github中demo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM