web-dev-qa-db-ja.com

express.jsを使用してnode.jsでhtmlを提供するためのベストプラクティスは何ですか?

現在、次のように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ページがある場合、これはおそらくそれらを呼び出すのに最適な方法ではないと思います。別のファイルまたは場所からそれらを提供し、exportまたは何かを使用してapp.jsの1つの関数または何かだけを呼び出すことができるより良い方法はありますか?それはルーティングの目的かもしれませんが、多分私はそれをあまりよく理解していません。

(同じファイルにあるコードを追加しました)

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')));
28
user2336703

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

ドキュメンテーション:

75

次のように、キャッチオール型のルートを最後のルートとして使用することも考えられます。

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);
6
Jacob Gillespie