2016-05-13 78 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; 
}