[node.js] 帶有express.js的靜態文件


1 Answers

如果你有這個設置

/app
   /public/index.html
   /media

那麼這應該得到你想要的

var express = require('express');
//var server = express.createServer();
// express.createServer()  is deprecated. 
var server = express(); // better instead
server.configure(function(){
  server.use('/media', express.static(__dirname + '/media'));
  server.use(express.static(__dirname + '/public'));
});

server.listen(3000);

訣竅就是將這條線作為最後的後備

  server.use(express.static(__dirname + '/public'));

至於文檔,由於Express使用連接中間件,我發現直接查看連接源代碼更容易。

例如,此行顯示index.html受支持https://github.com/senchalabs/connect/blob/2.3.3/lib/middleware/static.js#L140

Question

我想為index.html/media子目錄提供靜態文件。 索引文件應在/index.html/ URL中提供。

我有

web_server.use("/media", express.static(__dirname + '/media'));
web_server.use("/", express.static(__dirname));

但第二行顯然服務於整個__dirname ,包括其中的所有文件(不僅僅是index.htmlmedia ),這是我不想要的。

我也試過了

web_server.use("/", express.static(__dirname + '/index.html'));

但訪問基本URL /然後導致請求web_server/index.html/index.html (double index.html組件),這當然會失敗。

有任何想法嗎?

順便說一句,我可以發現在這個主題( static() +它的params)Express中絕對沒有文檔...令人沮喪。 文檔鏈接也是受歡迎的。




res.sendFileexpress.static兩者都適用於此

var express = require('express');
var app = express();
var path = require('path');
var public = path.join(__dirname, 'public');

// viewed at http://localhost:8080
app.get('/', function(req, res) {
    res.sendFile(path.join(public, 'index.html'));
});

app.use('/', express.static(public));

app.listen(8080);

其中public是客戶端代碼所在的文件夾

正如@ATOzTOA所suggested並由@ATOzTOA 闡明的 @Vozzie , path.join將路徑作為參數進行連接, +將單個參數傳遞給路徑。






Related