簡體   English   中英

ExpressJs - express.static(__ dirname)指向哪里?

[英]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) 
        );
    });
  1. app.use方法有什么作用?
  2. 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()本身做什么,它接受一個路徑並返回一個監聽請求的中間件函數。 這就是中間件的工作原理:

  1. 檢查請求方法是GET還是HEAD 如果不是,請忽略該請求。
  2. 解析路徑並暫停請求。
  3. 檢查是否存在默認重定向。 如果是這樣,請使用HTTP 303重定向。
  4. 如果遇到目錄或錯誤,請定義處理程序。
  5. 將所有內容傳遞給發送模塊以進行MIME標識和文件服務。

以下是來自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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM