node.js / express:发送静态文件(如果存在)

时间:2013-01-02 15:49:34

标签: node.js express socket.io

我想从文件夹中提供html文件(如果存在),否则回退到动态应用程序。

目前我使用的是:

var express = require('express');
var app = express()
, server = require('http').createServer(app)
, io = require('socket.io').listen(server);

server.listen(4444);

app.use("/", express.static(__dirname + '/../WebContent/index.html'));
app.use("/styles", express.static(__dirname + '/../WebContent/styles'));
app.use("/script", express.static(__dirname + '/../WebContent/script'));

//here I would like to define a rule like this:
//app.use("*.html", express.static(__dirname + '/../WebContent/*html'));

我怎样才能做到这一点?

有些教程使用名为connect的模块。如果这是我的问题最优雅的解决方案,我如何将连接集成到我当前的代码?

2 个答案:

答案 0 :(得分:4)

你不需要做任何特别的事情。

我假设WebContent文件夹在根目录中。

如果您所有的静态内容都与您所显示的基本文件夹相同,则无需多次指定。

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

如果您在WebContent文件夹中有一个名为file.html的文件,您现在可以通过URL访问它,即localhost:4444 / file.html

答案 1 :(得分:2)

你正在使用很多样板。使用routes更容易。这是一个例子:

var routes = require('./routes');

app.configure(function () {
    ...
    app.use(express['static'](path.join(__dirname, '/../WebContent')));
    app.use(app.router);
});

// Routes
app.get('/', routes.index);

<强>路由/ index.js:

exports.index = function (req, res) {
   res.render('index');
};

在项目根目录之外渲染webapp根目录非常奇怪。感觉好不好练习。这有必要吗?