小编Amí*_*les的帖子

nodejs hapi单页

我有一个应用程序站点(NodeJS),我想从Express迁移到Hapi,我通常做的是提供静态文件并将其他所有内容路由到包含angularjs应用程序和角度路由配置的单个页面.

// Express routing, first the static files
app.use( express.static(__dirname + '/public') );

// Second the api routes
app.get('/api', function(req, res){
    res.send( {api: 'response' } )
});

// Finally everything else maps to the single page app:
app.get('*', function(req, res){
    res.sendfile('./public/html/controllers.index.html')
});
Run Code Online (Sandbox Code Playgroud)

在HapiJS中,我不知道如何复制相同的代码(不使用express.static中间件),因为:

Hapi = require('hapi');
var server =  new Hapi.Server('localhost', 84);

server.route({
    method: 'GET',
    path: '/{p*}',
    handler: function (request, reply) {
        reply.file('public/html/index.html');
    }
});
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,每个请求都会被映射到我的单页('public/html/index.html'),但是如果我这样做,那么js,css,jpg和文件将被映射到同一个文件而不是脚本,样式和图像(对'/images/bg.png'的请求将下载单页而不是图像文件).

我知道如果我将路径'/'设置为单页,然后'{p*}'设置为'{directory:{path:'/ public'}}'那么我将拥有我需要的行为,但是如果一些用户复制并粘贴一个特定网址(比如'/ account/login')然后点击回车,那么该路由将被映射到HapiJS并且响应将是'Not Found(404)',角度路由将永远无法回应.

有人知道如何解决这个问题吗?

问题的关键部分是:

  • 仅使用HapiJS(无快递或其他中间件)
  • 不要路由每个角度路由(只是路由其他一些尚未路由到单页子角度的路径可以处理路由)

routing node.js angularjs hapijs

11
推荐指数
2
解决办法
6873
查看次数

标签 统计

angularjs ×1

hapijs ×1

node.js ×1

routing ×1