29

我目前在我的 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')));
4

2 回答 2

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

文档:

于 2013-05-16T17:26:20.517 回答
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);
于 2013-05-16T19:54:59.050 回答