2017-05-30 73 views
0

我想創建一個插件來爲HapiJS中的靜態文件提供服務。我的文件結構如下HapiJS - 靜態文件

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

在我的插件/資產/ assets.js文件我有以下代碼:

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'); 
} 

在我的config.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

從節點提供靜態文件的最佳方式是:不要。

甲CDN是高度優選的:

  • 甲CDN會收取每發送兆兆字節。

  • 雲實例會按正常運行時間收費。

對於一個普通的應用程序,它們之間的差別是每月數千美元。

在開發環境中,如果沒有CDN,您可以從常規Web服務器(如nginx)提供文件。由於nginx包裝在大多數發行版中,因此它的工作量也較少。

有這方面的性能方面的考慮,你想保持你的應用服務器儘可能快。

+1

聽起來不錯。我不認爲這是一種選擇。謝謝 – Vince