2017-05-30 9 views
0

静的ファイルをHapiJSに提供するためのプラグインを作成しようとしています。HapiJS - 静的ファイル

:私のconfig.jsonファイル(グルーマニフェスト)内

const Inert = require('inert'); 

exports.register = function(server, options, next) { 

    server.register('inert'); 

    server.route({ 
     method: 'GET', 
     path: '/{public}', 
     handler: { 
      directory: {path: '../../public'} 
     } 
    }); 

    next(); 
}; 

exports.register.attributes = { 
    pkg: require('./package'); 
} 

:私のファイル構造は、私は次のコードを持っているファイルassets.js /私のプラグイン/資産の中で、次の

|_ plugins 
| |_ assets 
| |_ assets.js 
| |_ package.json 
| |_ views 
|_ public 
| |_ css 
|app.js 
| config.json 
| package.json 

です

{ 
    "server": { 
    "app": { 
     "slogan": "We push the web forward" 
    } 
    }, 
    "connections": [ 
    { 
     "port": 3000, 
     "labels": ["web-ui"] 
    } 
    ], 
    "registrations": [ 
    {"plugin": "vision"}, 
    {"plugin": "inert"}, 
    {"plugin": "glue"}, 
    {"plugin": "./plugins/assets"} 
    ] 
} 

そして最後に、私のapp.jsで:

var Hapi = require('hapi'); 
var Glue = require('glue'); 

var manifest = require('./config.json'); 

const options = { 
    relativeTo: __dirname 
}; 

Glue.compose(manifest, options, function (err, server) { 
    server.start(function(err) { 
     console.log('Server running'); 
    }); 
}); 

私の質問は、この方法は、プラグインのアプローチを使用して静的なファイルを提供する正しい方法ですグルー?私が見たすべての例では、プラグイン手法を使用せず、パブリックディレクトリから静的ファイルを提供するためにapp.jsファイル内のserver.register()を使用しています。

+0

アセットと静的ファイルを自分で配信する場合は、アプローチは問題ありません。設定とアプローチで節約できます。すぐにすべての資産をCDNに移行する必要はありません。後の開発段階では、CDNに移行することができますが、それを始めるには完全にうまくいきます。 –

答えて

2

ノードから静的ファイルを提供する最良の方法は次のとおりです。

A CDNは非常に好ましい:

  • A CDNが送らテラバイトあたりのあなたを充電します。

  • 稼働時間ごとにクラウドインスタンスが課金されます。

月単位で、通常のアプリケーションの場合、これらの違いは数千ドルのオーダーです。

CDNがない開発環境では、nginxのような通常のWebサーバーからファイルを提供することができます。 nginxはほとんどのディストリビューションにパッケージ化されているので、これはあまり仕事でもありません。

パフォーマンスに関する考慮事項もありますが、アプリケーションサーバーをできるだけ早く保つ必要があります。

+1

いいですね。私はそれをオプションとは考えていませんでした。ありがとう – Vince