1. ホーム
  2. node.js

[解決済み] Express.jsで「パスは絶対かres.sendFileにルートを指定しなければならない」エラーが発生する。

2022-02-06 15:15:21

質問

注:これは重複した質問ではありません。同様の質問に対する他の回答はすでに試しています。

htmlファイルをレンダリングしようとしている(Angular)のですが、問題があります。 これは動作します。

app.get('/randomlink', function(req, res) {
    res.sendFile( __dirname + "/views/" + "test2.html" );
});

しかし、dirnameのようなものを何度もコピペするのは嫌なので、URLの繰り返しにならないようにするために、このような方法を試してみました。

app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'views')));

app.get('/randomlink', function(req, res) {
     res.sendFile('test2.html'); // test2.html exists in the views folder
 });

以下はそのエラーです。

私のexpressのバージョンは4.13です

パスは絶対パスか、res.sendFileにルートを指定する必要があります。

解決方法は?

の公式ドキュメントに反することはできません。 res.sendFile()

オプション・オブジェクトにルート・オプションが設定されていない限り、path はファイルへの絶対パスでなければなりません。

しかし、次のようなものをコピーしたくないというのは理解できます。 __dirname そのため、あなたの目的には、独自のミドルウェアを定義することができると思います。

function sendViewMiddleware(req, res, next) {
    res.sendView = function(view) {
        return res.sendFile(__dirname + "/views/" + view);
    }
    next();
}

その後、このミドルウェアを次のように簡単に使用することができます。

app.use(sendViewMiddleware);

app.get('/randomlink', function(req, res) {
    res.sendView('test2.html');
});