Node では、__dirname
は実行中のスクリプトが存在するディレクトリの名前を含むグローバル オブジェクトです。たとえば、node script.js
から実行している場合は/home/user/env
、__dirname
が含まれます`/home/user/env
。
このメソッドは、 Express が記述されているフレームワークであるConnectapp.use()
フレームワークから継承された関数です。このメソッドは、Express がリクエストを受信するたびに実行されるミドルウェア機能をアプリケーション スタックにアタッチします。
/
あなたが示したコードは、スクリプトが実行されているディレクトリから読み取るパスに静的サーバーをマウントします。
app.use('/', express.static(__dirname));
パスを に変更した場合/path
、静的ファイル サーバーは代わりにそのパスから静的ファイルを提供します。パスを指定しない場合/
、デフォルトで then が使用されます。
それ自体が何をするかについてexpress.static()
は、パスを受け入れ、リクエストをリッスンするミドルウェア関数を返します。ミドルウェアの仕組みは次のとおりです。
- リクエスト メソッドが
GET
またはであるかどうかを確認しHEAD
ます。どちらでもない場合は、リクエストを無視します。
- パスを解析し、リクエストを一時停止します。
- デフォルトのリダイレクトがあるかどうかを確認します。その場合は、
HTTP 303
.
- ディレクトリまたはエラーが発生した場合のハンドラを定義します。
- MIME 識別とファイル サービスのためにすべてを送信モジュールに渡します。
static()
参考までに、Connectのミドルウェア ソースを次に示します。
exports = module.exports = function(root, options) {
options = options || {};
// root required
if (!root) throw new Error('static() root path required');
// default redirect
var redirect = false !== options.redirect;
return function staticMiddleware(req, res, next) {
if ('GET' != req.method && 'HEAD' != req.method) return next();
var path = parse(req).pathname;
var pause = utils.pause(req);
function resume() {
next();
pause.resume();
}
function directory() {
if (!redirect) return resume();
var pathname = url.parse(req.originalUrl).pathname;
res.statusCode = 303;
res.setHeader('Location', pathname + '/');
res.end('Redirecting to ' + utils.escape(pathname) + '/');
}
function error(err) {
if (404 == err.status) return resume();
next(err);
}
send(req, path)
.maxage(options.maxAge || 0)
.root(root)
.index(options.index || 'index.html')
.hidden(options.hidden)
.on('error', error)
.on('directory', directory)
.pipe(res);
};
};