Префикс глобального пути HapiJS
Я пишу API на HapiJS и задаюсь вопросом, как получить глобальный префикс. Например, все запросы должны быть сделаны:
https://api.mysite.com/v0/...
Поэтому я хотел бы настроить v0
как глобальный префикс. Документы (здесь), похоже, не упоминают об этом - есть ли хороший способ сделать это в HapiJS?
Ответы
Ответ 1
Если вы поместите свою логику маршрутизации 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
.
Ответ 2
Мне удалось заставить его работать для всех маршрутов с помощью
var server = new Hapi.Server()
...
server.realm.modifiers.route.prefix = '/v0'
server.route(...)
Ответ 3
Ответ Matt Harrisson - это способ 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
-подобный монтаж. ex:
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")));
Ответ 4
вы всегда можете запустить свой index.js, как этот
if (!global.PREFIX) {
global.PREFIX = '/v0';
}
таким образом везде внутри вашего кода у вас будет доступ к PREFIX
что вы можете получить доступ к PREFIX
console.log(PREFIX);
или var name = PREFIX+ "_somename";