Expressプロジェクトで作業しているときに、express.Router
オブジェクトを使用してアプリケーションルートを処理しようとしています。メインのアプリファイルに、すべての静的ファイル(css、javascript、html)の静的ルートを追加しました。
var express = require('express');
var io = require('socket.io')(app);
var bodyParser = require('body-parser');
var router = require('./include/router');
var app = express();
app.use('/', router);
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.json());
io.on('connection', function(socket) {
});
app.listen(3000);
var express = require('express');
var path = require('path');
var router = express.Router();
router.get('/', function(req, res) {
res.sendFile('/html/index.html');
});
module.exports = router;
localhost:3000
にアクセスしようとすると、Error: ENOENT, stat 'C:\html\index.html'
を示す404が表示されます
さらに、静的ルートに直接アクセスしようとすると(http://localhost:300/html/index.html
と思います)、それでもCannot GET /html/index.html
が得られます。
これは私のパブリックフォルダの木です
public ├───css ├───hmtl | └───index.html ├───img └───js
私はこれを間違ってルーティングしていますか?どうすれば修正できますか?
ルーターの順序を逆にする必要があります
app.use('/', router);
app.use(express.static(__dirname + '/public'));
つまり、ルーターが最初に呼び出され、ミドルウェアが要求を処理しない場合、expressは静的ファイルを呼び出すため、静的ミドルウェアを最初に配置すると、expressが最初に静的ファイルを処理します。
静的ミドルウェアを最初に配置することもお勧めします。
あなたの問題のためにあなたはこれを試すべきです:
app.use(express.static(__dirname + '/public/html'));
app.use(express.static(__dirname + '/public'));
app.use('/', router);
Expressは最初にpublic/htmlフォルダーで静的ファイルを試し、次に残り(public/htmlを含む)で試します。私はhtmlファイルをpublicフォルダーのルートまたは別のフォルダー(例:public-html、static-html)に置くことを好みます。 )