247

静的ファイルとしてサブディレクトリを提供index.htmlしたい。/mediaインデックスファイルは、/index.html/URLの両方で提供する必要があります。

私は持っています

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

しかし、2行目は、 (とだけで__dirnameなく)その中のすべてのファイルを含む全体を提供しているようです。index.htmlmedia

私も試しました

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

ただし、ベースURLにアクセスすると、(ダブルコンポーネント)/へのリクエストが発生しますが、これはもちろん失敗します。web_server/index.html/index.htmlindex.html

何か案は?


ちなみに、このトピック(static()+そのパラメータ)に関するExpressのドキュメントはまったく見つかりませんでした...イライラします。ドキュメントリンクも大歓迎です。

4

10 に答える 10

212

この設定がある場合

/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

于 2012-05-04T07:57:30.223 に答える
148

Expressの最新バージョンでは、「createServer」は非推奨になりました。この例は私のために働きます:

var express = require('express');
var app = express();
var path = require('path');

//app.use(express.static(__dirname)); // Current directory is root
app.use(express.static(path.join(__dirname, 'public'))); //  "public" off of current is root

app.listen(80);
console.log('Listening on port 80');
于 2013-05-13T14:32:40.297 に答える
116

express.static()最初のパラメータは、ファイル名ではなく、ディレクトリのパスである必要があります。を含む別のサブディレクトリを作成して使用することをお勧めしますindex.html

Expressドキュメント、またはより詳細なserve-staticドキュメントで静的ファイルを提供します。これには、提供のデフォルトの動作がindex.html含まれます。

デフォルトでは、このモジュールはディレクトリへのリクエストに応じて「index.html」ファイルを送信します。このセットを無効にするには、falseを設定するか、新しいインデックスを指定して、文字列または配列を優先順に渡します。

于 2012-05-03T22:25:51.280 に答える
53

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によって提案され、 @ Vozzieによって明確にされ ているように、引数として結合するパスを取り、パスに単一の引数を渡します。path.join+

于 2017-04-09T22:43:36.913 に答える
8
const path = require('path');

const express = require('express');

const app = new express();
app.use(express.static('/media'));

app.get('/', (req, res) => {
    res.sendFile(path.resolve(__dirname, 'media/page/', 'index.html'));
});

app.listen(4000, () => {
    console.log('App listening on port 4000')
})
于 2019-04-02T05:35:52.073 に答える
6

次のような複雑なフォルダ構造がある場合

- application
     - assets
         - images
             - profile.jpg
     - web
     - server
        - index.js

あなたがから奉仕assets/imagesしたい場合index.js

app.use('/images', express.static(path.join(__dirname, '..', 'assets', 'images')))

ブラウザから表示するには

http://localhost:4000/images/profile.jpg

さらに明確なコメントが必要な場合は、詳しく説明します。

于 2020-10-07T05:55:52.083 に答える
3

npm installserve-index

var express    = require('express')
var serveIndex = require('serve-index')
var path = require('path')
var serveStatic = require('serve-static')
var app = express()
var port = process.env.PORT || 3000;
/**for files */
app.use(serveStatic(path.join(__dirname, 'public')));
/**for directory */
app.use('/', express.static('public'), serveIndex('public', {'icons': true}))

// Listen
app.listen(port,  function () {
  console.log('listening on port:',+ port );
})
于 2017-10-02T19:04:19.887 に答える
3

app.js内で以下を使用してください

app.use(express.static('folderName'));

(folderNameはファイルを含むフォルダーです)-これらのアセットはサーバーパスを介して直接アクセスされることに注意してください(つまり、http:// localhost:3000 / abc.png (abc.pngはfolderNameフォルダー内にあります)

于 2019-01-11T18:53:15.730 に答える
1

エクスプレスドキュメントにあるものを追加しますが、チュートリアルなどで誤読されることがあります。

app.use(mountpoint, middleware) 

マウントポイントは仮想パスであり、ファイルシステムにはありません(実際に存在する場合でも)。ミドルウェアのマウントポイントはapp.jsフォルダです。

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

/static/hell/meow/a.jsにパスを含むファイルを送信します/public/hell/meow/a.js

于 2021-06-29T09:52:52.390 に答える
0

これは、HTMLファイルへのリンクを提供するときの私の場合のエラーです。

前:

<link rel="stylesheet" href="/public/style.css">

後:

<link rel="stylesheet" href="/style.css">

リンクから静的ディレクトリパスを削除したところ、エラーはなくなりました。これで私のエラーが解決します。サーバーを作成している場所にこの行を配置することを忘れないでください。

var path = require('path');
app.use(serveStatic(path.join(__dirname, 'public')));
于 2021-08-27T09:33:15.607 に答える