2017-05-30 1 views
0

J'essaie de créer un plugin pour servir mes fichiers statiques dans HapiJS. Ma structure de fichier est le suivantHapiJS - Static Files

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

Dans mes plugins/assets/assets.js fichier Je le code suivant:

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

Dans mon fichier config.json (colle manifeste):

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

Et enfin, dans mes 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'); 
    }); 
}); 

Ma question est la bonne façon de servir les fichiers statiques en utilisant une approche de plugins avec de la colle? Tous les exemples que j'ai vus n'utilisent pas une approche de plugin et emploient plutôt le server.register() dans le fichier app.js pour servir les fichiers statiques du répertoire public.

+0

Votre approche est correcte, si vous souhaitez traiter vous-même les fichiers actifs et statiques. Vous économisez avec votre configuration et votre approche, il n'est pas nécessaire de déplacer immédiatement tous vos actifs vers un CDN. Au cours d'une phase de développement ultérieure, vous pouvez migrer vers un CDN, mais il est tout à fait possible de le faire vous-même. –

Répondre

2

La meilleure façon de servir les fichiers statiques à partir du noeud est: ne pas.

Un CDN est hautement préférable:

  • Un CDN vous facture par téraoctets envoyés. Une instance de cloud vous facture par temps de fonctionnement.

Dans tous les mois, pour une application régulière, la différence entre ceux-ci sont dans l'ordre de milliers de dollars.

Dans un environnement de développement, en l'absence d'un CDN, vous pouvez servir vos fichiers à partir d'un serveur Web classique tel que nginx. C'est aussi moins de travail, car nginx est livré dans la plupart des distributions.

Il existe également des considérations de performances pour conserver vos serveurs d'applications aussi rapidement que possible.

+1

Ça sonne bien. Je n'ai pas pensé à cela comme une option. Merci – Vince