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)
);
});
答案 0 :(得分:21)
在Node中,__dirname
是一个全局对象,包含执行脚本所在目录的名称。例如,如果您从node script.js
开始运行/home/user/env
,那么__dirname
将包含`/home/user/env
。
方法app.use()
是一个继承自Connect框架的函数,它是写入的框架Express。该方法将中间件函数附加到应用程序堆栈,每次Express收到请求时都会运行该应用程序堆栈。
您展示的代码将静态服务器安装到从脚本执行目录中读取的路径/
:
app.use('/', express.static(__dirname));
如果要将路径更改为/path
,则静态文件服务器将提供该路径中的静态文件。如果您未指定路径,则默认使用/
。
至于express.static()
自身的作用,它接受一个路径并返回一个监听请求的中间件函数。这就是中间件的工作原理:
GET
还是HEAD
。如果不是,请忽略该请求。HTTP 303
重定向。以下是来自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);
};
};
答案 1 :(得分:19)
app.use方法有什么作用?
Express有Middleware
,可以使用app.configure进行配置,我们可以在其中调用use 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链接。