HapiJS全局path前缀

我在HapiJS上编写一个API,想知道如何获得一个全局的前缀。 例如,所有的请求都应该做到:

https://api.mysite.com/v0/... 

所以我想将v0configuration为全局前缀。 文档( 这里 )似乎没有提到它 – 在HapiJS中有这样做的好方法吗?

如果你把你的API路由逻辑放在一个Hapi插件中 ,比如说./api.js

 exports.register = function (server, options, next) { server.route({ method: 'GET', path: '/hello', handler: function (request, reply) { reply('World'); } }); next(); }; exports.register.attributes = { name: 'api', version: '0.0.0' }; 

您可以在服务器上注册该插件,并传递一个可选的路由前缀,该前缀将被预先添加到插件中的所有路由中:

 var Hapi = require('hapi'); var server = new Hapi.Server() server.connection({ port: 3000 }); server.register({ register: require('./api.js') }, { routes: { prefix: '/v0' } }, function(err) { if (err) { throw err; } server.start(function() { console.log('Server running on', server.info.uri) }) }); 

您可以通过启动服务器并访问http://localhost:3000/v0/hello来validation这一点。

马特哈里森的答案是使用插件做hapi的方式。

另外,如果你不想创build一个插件只是添加一个前缀,你可以手动添加前缀到所有的路由。

比如我去做这样的事情:

  var PREFIX = '/v0'; var routes = [/* array with all your root */]; var prefixize = function (route) { route.path = PREFIX + route.path;return route; } server.route(routes.map(prefixize)); 

好的一点是,像这样的东西,你可以执行express的安装。 例如:

  var prefixize = function (prefix, route) { route.path = prefix + route.path;return route; } server.route(adminRoutes.map(prefixize.bind({}, "/admin"))); //currying. server.route(apiRoutes.map(prefixize.bind({}, "/api"))); 

我能够得到它与所有路线的工作

 var server = new Hapi.Server() ... server.realm.modifiers.route.prefix = '/v0' server.route(...) 

你总是可以像这样开始你的index.js

 if (!global.PREFIX) { global.PREFIX = '/v0'; } 

在代码中的任何地方都可以访问PREFIX

这就是你如何访问PREFIX

console.log(PREFIX);var name = PREFIX+ "_somename";