2015-01-10 2 views
10

Я пишу API на HapiJS и задаюсь вопросом, как получить глобальный префикс. Например, все запросы должны быть сделаны:Префикс глобального пути HapiJS

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

Так что я хотел бы настроить v0 в качестве глобального префикса. Документы (here), похоже, не упоминают об этом - есть ли хороший способ сделать это в HapiJS?

ответ

13

Если поместить логику маршрутизации API внутри Hapi plugin, скажем ./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.

+2

Я не могу показаться, чтобы получить этот метод работать. Я смог установить его непосредственно с помощью 'server.realm.modifiers.route.prefix = '/ v0'', но не с помощью параметров вложенности, как вы показываете. Вы уверены, что ваш подход работает? – tyler

+1

Да, я только что протестировал его с помощью Hapi 8. Этот префикс доступен только при регистрации одного плагина. Поэтому, если вы регистрируете несколько плагинов, это не сработает. –

+3

@MattHarrison Это, вероятно, хорошая идея, чтобы обновить свой ответ с помощью многословного отказа от ответственности :) – Gaston

1

вы всегда можете начать свой index.js как этот

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

таким образом везде внутри вашего кода вы будете иметь доступ к PREFIX

, что, как вы можете получить доступ к PREFIX

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

3

Matt Harrisson's answer является hapi способ сделать это с помощью плагинов.

В качестве альтернативы, если вы не хотите создавать плагин, чтобы добавить префикс, вы можете вручную, добавьте префикс на все ваши маршруты.

Например, я пошел что-то вроде этого:

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"))); 
+0

Это правильный ответ, поскольку ответ Мэтта Харриссон не работает для нескольких плагинов, которые у большинства людей будут. –

4

Я был в состоянии заставить его работать на всех маршрутах с

var server = new Hapi.Server() 
... 
server.realm.modifiers.route.prefix = '/v0' 
server.route(...) 
Смежные вопросы