使用express.js在node.js中提供html的最佳做法是什么?

时间:2013-05-16 17:22:38

标签: html node.js express static-files

我目前正在我的app.js / server.js文件中提供所有html,如下所示:

app.get('/', function(req, res) {
    res.render('index.html');
});
app.get('/about', function(req, res) {
    res.render('about.html');
});
app.get('/projects', function(req, res) {
    res.render('projects.html');
});

我想如果我有15个以上的html页面,这可能不是调用它们的最好方法。有没有更好的方法从另一个文件或位置提供服务,并使用导出或其他东西只能在app.js上调用一个函数或其他东西。它可能是路由的用途,但也许我不太了解它。

(添加了同一文件中的更多代码)

app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/public');

// used below code to render html files
app.engine('html', require('ejs').renderFile);

app.set('view engine', 'ejs');
app.use(express.favicon("public/img/favicon.ico"));
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

2 个答案:

答案 0 :(得分:75)

您可以使用static中间件:

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

服务器示例:

var express = require('express');
var app = express();
app.use('/', express.static(__dirname + '/public'));
app.listen(3000, function() { console.log('listening')});

这是文件结构:

.
├── public
│   ├── a.html
│   ├── b.html
│   └── c.html
└── server.js

文档:

答案 1 :(得分:6)

一个想法是使用一种包罗万象的路线作为最后一条路线,如下所示:

app.get('/:page', function(req, res) {
  res.sendfile(path.join(__dirname, 'public', 'pages', path.basename(req.params.page) + '.html'));
});

这需要您将.html文件放入public / pages / about.html等。

您可能希望切换静态文件路由器的顺序,以便静态文件也优先于路由,除非您希望该路由捕获公共文件夹中的内容,如下所示:

应用

app.set('view engine', 'ejs');
app.use(express.favicon("public/img/favicon.ico"));
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'public')));
app.use(app.router);