web-dev-qa-db-ja.com

RESTIFYを使用して静的ファイルを提供する

Node.jsの使用方法を学んでいます。現在、次のようなフォルダー構造があります。

index.html
server.js
client
  index.html
  subs
    index.html
    page.html
res
  css
    style.css
  img
    profile.png
  js
    page.js
    jquery.min.js

server.jsは私のWebサーバーコードです。 node server.jsを使用してコマンドラインからこれを実行します。そのファイルの内容は次のとおりです。

var restify = require('restify');

var server = restify.createServer({
    name: 'Test App',
    version: '1.0.0'
});

server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());

server.get('/echo/:name', function (req, res, next) {
    res.send(req.params);
    return next();
});

server.listen(2000, function () {
    console.log('%s running on %s', server.name, server.url);
});

ご覧のとおり、このサーバーはRESTIFYに依存しています。 RESTIFYを使用する必要があると言われました。ただし、静的ファイルを提供する方法がわかりません。たとえば、アプリで* .html、*。css、*。png、および* .jsファイルをサーバー化するにはどうすればよいですか?

ありがとうございました!

30
Node Newbie

ドキュメント から:

server.get(/\/docs\/public\/?.*/, restify.serveStatic({
  directory: './public'
}));

ただし、これは./public/docs/public/ディレクトリ内のファイルを検索します。
ここでは __ dirname キーを使用します:

server.get(/\/public\/?.*/, restify.serveStatic({
    directory: __dirname 
}));

__dirnameの値は、スクリプトファイルのディレクトリパスと同じであり、フォルダーも想定されます。ここで、publicディレクトリです。

そして今、すべての/public/.* URLを./public/ディレクトリにマッピングします。

43
vp_arth

私の現在のrestifyバージョンによると(v5.2.0)

serveStaticpluginsに移動されたため、コードは次のようになります

server.get(
  /\/(.*)?.*/,
  restify.plugins.serveStatic({
    directory: './static',
  })
)

上記の構文は、フォルダーstaticの静的ファイルを提供します。したがって、http://yoursite.com/awesome-photo.jpgのような静的ファイルを取得できます

何らかの理由で、たとえばhttp://yoursite.com/assets/awesome-photo.jpgのような特定のパスで静的ファイルを提供したい場合。

コードはこれにリファクタリングする必要があります

server.get(
  /\/assets\/(.*)?.*/,
  restify.plugins.serveStatic({
    directory: `${app_root}/static`,
    appendRequestPath: false
  })
)

上記のappendRequestPath: falseオプションは、ファイル名にassetsパスを含めないことを意味します

Restify 7からのルート 完全な正規表現を取得しなくなりました ですので、/public/stylesheet.cssファイルを提供する./public/stylesheet.css、コードは次のようになります。

server.get('/public/*', restify.plugins.serveStatic({
  directory: __dirname,
}))

これは、Restify 7に新しい(潜在的に高速な)ルーティングバックエンドがあるためです。 find-my-way

4
leo

これは私がrestifyで静的ファイルを提供している方法です

server.get(/\/public\/docs\/?.*/, restify.plugins.serveStatic({

          directory: __dirname,

          default: 'index.html'

        }));

パブリックアクセスパスは、example.com/public/docs/index.htmlになります。

2
Zohaib

私はこの問題に最近出くわしたので、これはあなたには役に立たないかもしれませんが、問題を抱えている他の人には役立つかもしれません。

Restifyをconst restify = require('restify');として宣言すると、serveStaticメソッドがプラグインオブジェクトに含まれるため、restify.serveStaticは静かに失敗します。メソッドにアクセスする正しい方法はrestify.plugins.serveStatic

更新ドキュメントは次の場所にあります: http://restify.com/docs/plugins-api/#serve-static

1
Mike Fleming

これを試してください:ここでのビューは、静的リソースディレクトリ名です

server.get('/\/.*/', restify.plugins.serveStatic({

    directory: __dirname + "/view/",
    default: './home.html' 

   })
);
0
Om Sharma
server.get('/', function(req, res, next) {
    fs.readFile(__dirname + '/index.html', function (err, data) {
        if (err) {
            next(err);
            return;
        }
        res.setHeader('Content-Type', 'text/html');
        res.writeHead(200);
        res.end(data);
        next();
    });
});
0
techyaura