繁体   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