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

var express = require('express'); var app = express(); port = process.argv[2] || 8000; app.configure(function () { app.use( "/", express.static(__dirname) ); }); app.listen(port); 

我删除了这一行下面,我加载本地主机时出现错误

 app.configure(function () { app.use( "/", express.static(__dirname) ); }); 
  1. app.use方法做了什么?
  2. express.static方法做什么? __dirname指向哪里?

app.use方法做了什么?

Express有一个Middleware ,可以使用app.configure进行configuration,我们可以在这里使用app.use()Middleware是由路由使用的,让我把我称为app.use(express.bodyParser()) ,这层添加到我的Middleware堆栈。 这确保了对于所有传入的请求,服务器parsingMiddleware所关心的正文。 发生这种情况是因为我们添加了图层到我们的Middleware

http://www.senchalabs.org/connect/proto.html#app.use

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

代码创build一个Express服务器,添加静态Middleware ,最后开始监听端口3000或提供的端口。

 app.use( "/", express.static(__dirname) ); 

上面的代码相当于下面,你让你明白。

 app.use(express.static(__dirname + '/')); 

静态中间件句柄处理来自目录的内容。 在这种情况下,“根”目录被提供,任何内容(HTML,CSS,JavaScript)都将可用。 这意味着如果根目录如下所示:

 index.html js - folder css - folder 

关于同一主题的更多参考,下面是关联的stackoverflow链接。

  • 快速app.use
  • 中间件和app.use在Expressjs中究竟意味着什么?

在Node中, __dirname是一个全局对象,包含执行脚本所在目录的名称。 例如,如果您从/home/user/env运行node script.js ,则__dirname将包含`/home/user/env

app.use()方法是一个从Connect框架inheritance而来的函数,这个框架是写在Express框架上的。 该方法将中间件function附加到应用程序堆栈,该应用程序堆栈在Express每次收到请求时都会运行。

您显示的代码将静态服务器挂载到从脚本正在执行的目录读取的path:

 app.use('/', express.static(__dirname)); 

如果要将path更改为/path ,则静态文件服务器将提供来自该path的静态文件。 如果您指定了没有path,则默认使用/

至于什么express.static()本身,它接受一个path,并返回一个中间件function,监听请求。 这就是中间件的工作原理:

  1. 检查请求方法是GET还是HEAD 。 如果两者都不,则忽略该请求。
  2. parsingpath并暂停请求。
  3. 检查是否有默认的redirect。 如果是这样,用HTTP 303redirect。
  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); }; };