我正在尝试使用hapi和inert构建单页面应用程序。
我的示例代码在这里:https://github.com/7seven7lst/hapi-inert-test
并且项目的基础是根据nodejs hapi single page
的答案构建的基本上我想将服务器静态文件和api json数据都安装到前端。我知道如何在快递中做到这一点,但还没弄清楚如何使用hapi。 delimma是:如果我只使用hapi,它不提供静态文件,如果我使用hapi + inert,它不会提供api路由。
解决方案????
答案 0 :(得分:0)
文档说路由处理程序选择从最具体到最不具体的路由。因此,您可以使用/ api / v1 /之类的东西预先修复api路由,然后以/ api / v1 /开头的所有其他内容将被路由到由惰性抛出的静态文件。
Hapi.js Routing Documentation:
在确定用于特定请求的处理程序时,hapi按顺序搜索路径,从最具体到最不具体。这意味着如果你有两个路由,一个路径为/filename.jpg,另一个路径为/filename.{ext},对/ filename.jpg的请求将匹配第一个路由,而不是第二个路由。这也意味着路径/ {files *}的路由将是最后测试的路由,并且只有在所有其他路由都失败时才匹配。
'use strict'
const Hapi= require('Hapi')
// Config
var config= {
connection: {port: 3000, host: 'localhost'}
}
const server= new Hapi.Server()
server.connection(config.connection)
const plugins= [
// https://github.com/hapijs/inert
{ register: require('inert'), options: {} },
]
function setupRoutes() {
// Sample API Route
server.route({
method: 'GET',
path: '/api/v1/Person/{name}',
handler: function (req, reply) {
reply('Hello, '+ encodeURIComponent(req.params.name)+ '!')
}
})
// Web Server Route
server.route({
method: 'GET',
path: '/{files*}',
// https://github.com/hapijs/inert#the-directory-handler
handler: {directory: {path: '../html_root', listing: false, index: true } }
})
}
server.register(plugins, (err)=> {
if (err) {throw err}
// Initialize all routes
setupRoutes()
// Start the Server
server.start((err)=> {
if (err) {throw err}
server.log('info', `Server running at: ${server.info.uri}`)
})
})