使用惰性插件的hapi单页应用程序不提供api路由

时间:2017-07-02 01:53:35

标签: hapijs

我正在尝试使用hapi和inert构建单页面应用程序。

我的示例代码在这里:https://github.com/7seven7lst/hapi-inert-test

并且项目的基础是根据nodejs hapi single page

的答案构建的

基本上我想将服务器静态文件和api json数据都安装到前端。我知道如何在快递中做到这一点,但还没弄清楚如何使用hapi。 delimma是:如果我只使用hapi,它不提供静态文件,如果我使用hapi + inert,它不会提供api路由。

解决方案????

1 个答案:

答案 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}`)
    })
})