[英]redirected to wrong html page when using express.static(__dirname) function in node.js with express
[英]ExpressJs - where express.static(__dirname) point to?
var express = require('express');
var app = express();
port = process.argv[2] || 8000;
app.configure(function () {
app.use(
"/",
express.static(__dirname)
);
});
app.listen(port);
我刪除了下面的這一行,並在加載localhost時出錯
app.configure(function () {
app.use(
"/",
express.static(__dirname)
);
});
在Node中, __dirname
是一個全局對象,包含執行腳本所在目錄的名稱。 例如,如果從/home/user/env
運行node script.js
,則__dirname
將包含`/home/user/env
。
方法app.use()
是一個繼承自Connect框架的函數,它是寫入的框架Express。 該方法將中間件功能附加到應用程序堆棧,每次Express收到請求時都會運行該應用程序堆棧。
您顯示的代碼將靜態服務器安裝到從腳本執行的目錄中讀取的路徑/
:
app.use('/', express.static(__dirname));
如果要將路徑更改為/path
,則靜態文件服務器將從該路徑提供靜態文件。 如果未指定路徑,則默認使用/
。
至於express.static()
本身做什么,它接受一個路徑並返回一個監聽請求的中間件函數。 這就是中間件的工作原理:
GET
還是HEAD
。 如果不是,請忽略該請求。 HTTP 303
重定向。 以下是來自Connect的static()
中間件源以供參考:
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);
};
};
app.use方法有什么作用?
Express有一個Middleware
,可以使用app.configure進行配置,我們可以在其中調用app.use()
。 Middleware
由路由使用,讓我稱為app.use(express.bodyParser())
,它將此層添加到我的Middleware
堆棧。 這確保了對於所有傳入請求,服務器解析Middleware
負責的主體。 發生這種情況是因為我們將圖層添加到了Middleware
。
http://www.senchalabs.org/connect/proto.html#app.use
express.static方法是什么? __dirname指向哪里?
代碼創建一個Express服務器,添加靜態Middleware
,最后開始偵聽端口3000
或提供的端口。
app.use(
"/",
express.static(__dirname)
);
上面的代碼相當於下面的代碼,您可以通過它理解。
app.use(express.static(__dirname + '/'));
靜態中間件處理從目錄提供內容。 在這種情況下,“root”目錄被提供,任何內容(HTML,CSS,JavaScript)都可用。 這意味着如果根目錄如下所示:
index.html
js - folder
css - folder
有關同一主題的更多參考,下面是相關的stackoverflow鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.