Javascript ExpressJs-express.static(_dirname)指向哪里?

Javascript ExpressJs-express.static(_dirname)指向哪里?,javascript,node.js,express,Javascript,Node.js,Express,我删除了下面这一行,在加载localhost时出错 var express = require('express'); var app = express(); port = process.argv[2] || 8000; app.configure(function () { app.use( "/", express.static(__dirname) ); }); app.listen(port); app.use方法的作用是什么

我删除了下面这一行,在加载localhost时出错

var express = require('express');
var app = express();
port = process.argv[2] || 8000;

app.configure(function () {
    app.use(
        "/", 
        express.static(__dirname) 
    );
});
app.listen(port);
  • app.use方法的作用是什么
  • express.static方法做什么?那么_udirname指向哪里呢

  • app.use方法的作用是什么?

    Express有一个
    中间件
    ,可以使用app.configure进行配置,我们可以在其中调用use
    app.use()
    <代码>中间件由路由使用,让我们以我调用的
    app.use(express.bodyParser())
    将此层添加到我的
    中间件
    堆栈中。这确保了对于所有传入的请求,服务器解析由
    中间件处理的主体。这是因为我们将该层添加到
    中间件中

    express.static方法是什么?__dirname指向哪里?

    代码创建一个Express服务器,添加静态
    中间件
    ,最后开始侦听端口
    3000
    或提供的端口

    app.configure(function () {
            app.use(
                "/", 
                express.static(__dirname) 
            );
        });
    
    上面的代码相当于下面的代码,请您理解

    app.use(
         "/",
         express.static(__dirname)
    );
    
    静态中间件处理从目录提供内容。在这种情况下,将提供“根”目录,任何内容(HTML、CSS、JavaScript)都将可用。 这意味着如果根目录看起来像:

    app.use(express.static(__dirname + '/')); 
    
    有关同一主题的更多参考资料,请参见下面的stackoverflow链接


    在节点中,
    \uuu dirname
    是一个全局对象,其中包含执行脚本所在目录的名称。例如,如果从
    /home/user/env
    运行
    节点script.js
    ,则
    \uuuu dirname
    将包含
    `/home/user/env

    方法
    app.use()。该方法将中间件功能附加到应用程序堆栈,该应用程序堆栈在Express每次收到请求时运行

    您显示的代码将静态服务器装载到路径
    /
    ,该路径从脚本执行的目录中读取:

    index.html
    js - folder
    css - folder
    
    如果要将路径更改为
    /path
    ,则静态文件服务器将从该路径提供静态文件。如果未指定路径,则默认情况下使用
    /

    至于
    express.static()。这就是中间件的工作原理:

  • 检查请求方法是否为
    GET
    HEAD
    。如果两者都不存在,则忽略该请求
  • 解析路径并暂停请求
  • 检查是否存在默认重定向。如果是,请使用
    HTTP 303
    重定向
  • 定义遇到目录或错误时的处理程序
  • 将所有内容传递给模块以进行MIME标识和文件服务
  • 以下是Connect的
    static()
    中间件源代码,供参考:

    app.use('/', express.static(__dirname));
    
    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);
      };
    };