我正在HapiJS上编写API,并想知道如何获得全局前缀。例如,所有请求都应向以下方面提出:
https://api.mysite.com/v0/...因此,我想将v0配置为全局前缀。docs (这里)似乎没有提到它--在HapiJS中有什么好方法来做到这一点吗?
发布于 2015-01-19 16:00:08
如果您将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来验证这一功能。
发布于 2017-02-02 02:30:21
我能让它在所有的航线上运行
var server = new Hapi.Server()
...
server.realm.modifiers.route.prefix = '/v0'
server.route(...)发布于 2015-03-20 12:28:35
马特·哈里森的回答是使用插件实现它的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-like安装。例:
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")));https://stackoverflow.com/questions/27871324
复制相似问题