2016-05-13 55 views
0

我剛開始學習Node.js和hapi.js.我現在想要完成的是構建一個REST Web服務器,該服務器還應該具有用於​​配置和統計信息收集的Web界面。創建可以爲複雜網頁服務的HapiJs服務器

我發現Inert插件允許服務靜態頁面,據我所知,這限制了我加載一個由單個文件組成的網頁。

但是,我不明白的是,是否有可能設置hapi.js來提供cssjs及其正文中引用的其他文件的完整動態網頁。

我用這個方向走錯了方向,否則我該如何設置我的場景?

+1

看一看視覺從模板HTML的動態渲染。 CSS和JS你可以使用Inert服務,因爲它們通常只是靜態文件。 –

回答

1

您可以從指定目錄提供多個靜態文件。

只是嘗試了inerthapi,用這個例子:

https://github.com/hapijs/inert#static-file-server

惰性沒有問題,從給定的目錄服務多個靜態文件,e.g public

所以,你將沒有問題,從指定的目錄服務多個靜態html,css,js文件。然後,您可以使用Hapi構建動態JSON api,並使用js客戶端代碼使用該代碼,並從公共目錄中的靜態js文件提供服務。

如果你需要的模板,在那裏你生成的服務器端動態內容,高致病性禽流感能做到開箱,檢查出:

http://hapijs.com/tutorials/views

很抱歉,如果這不是你的意思,請隨時澄清,如果不是:-)

希望幫助!

1

vision插件是用於模板,這是我認爲你後。如果您想將css和js文件與您的頁面捆綁在一起,您可以將它們放在公共目錄中,並通過inert plugin進行提供。然後,您只需要在您要呈現的任何html文件中引用相對路徑。

下面是一個使用handlebars的簡單示例。 Inert負責爲您的css和js文件提供服務,同時視覺仍然呈現您的模板。

./index.js

var hapi = require('hapi'); 

var server = new hapi.Server(); 
server.connection({port: 5555}); 

server.register([require('vision'), require('inert')], (err) => { 
    if(err){ 
     throw err; 
    } 

    server.views({ 
     engines: { 
      html: require('handlebars') 
     }, 
     relativeTo: __dirname + '/', 
     path: 'www' 
    }); 

    var homeroute = { 
     method: 'GET', 
     path: '/', 
     handler: (request, reply) => { 
      reply.view('index', {name: 'cuthbert'}); 
     } 
    }; 

    var publicassetsroute = { 
     method: 'GET', 
     path: '/public/{param*}', 
     handler: { 
      directory: { 
       path: './public', 
       listing: false, 
       index: false 
      } 
     } 
    }; 

    server.route(homeroute); 
    server.route(publicassetsroute); 

    server.start((err) => { 
     console.log('server started -- ' + server.info.uri) 
    }); 

}); 

www/index.html

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Hapi Test</title> 
    <link rel="stylesheet" href="../public/index.css"> 
</head> 
<body> 
    <h1>A Hapi Happy Test.</h1> 
    <p>This is a test page. Woo!</p> 
    <p>My name is {{name}}.</p> 
</body> 
</html> 

public/index.css

p { 
    color: blue; 
}