我刚开始学习Node.js和hapi.js.我现在要完成的是构建一个REST Web服务器,该服务器还应该具有用于配置和统计信息收集的Web界面。
我发现Inert插件允许提供静态页面,据我所知,这限制了我加载一个由单个文件组成的网页。
但是,我不明白的是,是否可以设置hapi.js来提供包含css
,js
以及其正文中引用的其他文件的完整动态网页。
我是否朝着错误的方向前进,否则我该如何设置我的方案?
答案 0 :(得分:1)
您可以从指定目录提供多个静态文件。
使用此示例尝试inert
与hapi
:
https://github.com/hapijs/inert#static-file-server
Inert从给定目录提供多个静态文件没有问题,例如public
。
因此,从指定的目录提供多个静态html,css,js文件没有问题。然后,您可以使用Hapi构建动态JSON api,并使用您的js客户端代码使用它,从公共目录中的静态js文件提供。
如果您需要模板化,在服务器端生成动态内容,hapi可以直接执行此操作,请查看:
http://hapijs.com/tutorials/views
很抱歉,如果这不是您的意思,请随时澄清: - )
希望有所帮助!
答案 1 :(得分: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;
}