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

28 html static-files node.js express

我目前正在我的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');
});
Run Code Online (Sandbox Code Playgroud)

我想如果我有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')));
Run Code Online (Sandbox Code Playgroud)

Alb*_*gni 75

你可以使用static中间件:

app.use("/", express.static(__dirname));
Run Code Online (Sandbox Code Playgroud)

服务器示例:

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

这是文件结构:

.
??? public
?   ??? a.html
?   ??? b.html
?   ??? c.html
??? server.js
Run Code Online (Sandbox Code Playgroud)

文档:


Jac*_*pie 6

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

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

这需要您将.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);
Run Code Online (Sandbox Code Playgroud)