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) ); });
- app.use方法做了什么?
- 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,监听请求。 这就是中间件的工作原理:
- 检查请求方法是
GET
还是HEAD
。 如果两者都不,则忽略该请求。 - parsingpath并暂停请求。
- 检查是否有默认的redirect。 如果是这样,用
HTTP 303
redirect。 - 为遇到目录或错误定义处理程序。
- 将所有内容传递给发送模块以进行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); }; };