2015-03-18 2 views
4

Я сейчас обновляю small library, который я сделал для разбора локали из объекта запроса. В настоящее время он работает с Express и Koa, но я пытаюсь заставить его работать с Hapi.Как правильно установить и протестировать домен и поддомен Хапи?

Для тестов я использую метод Mocha и Hapi, как описано в их документах. Я также посмотрел в своих документах для установки properties сервера, но я не нашел примера установки домена, такого как locahost.en или даже таких поддоменов, как en.localhost.com.

В настоящее время у меня есть тест установки, как следующее:

var server = new Hapi.Server(); 
server.connection({ 
    //is this correct? 
    uri:'localhost.en:3000', 
    port: 3000 
}); 

var handler = function(request, reply) { 
    //return the parsed locale {String} 
    return reply(accept(request, { 
      supported: ['en'] 
    }).getFromDomain()); 
}; 

server.route({ 
    method: 'GET', 
    path: '/', 
    handler: handler 
}); 
server.start(function() {}); 

где inject устанавливается так:

server.inject({ 
    method: 'GET', 
    url: '/', 
    headers: { 
     'Accept-Language': 'ja', 
     'Set-Cookie': 'mycookie=test' 
    }}, function(res) { 
     assert.strictEqual(res.result, 'en'); 
     done(); 
}); 

Как я смог бы установить домен и поддомен на сервере свойства? Есть ли плагин, который это делает? Кроме того, как я мог получить/проанализировать домен и поддомены от request? Я предполагаю, что могу получить домен от hostname, но как насчет субдомена?

ответ

8

По умолчанию Hapi будет прослушивать порт в сетевом интерфейсе для всех запросов независимо от домена (обозначается значением заголовка host). Если вы хотите получить значение заголовка хоста для запроса, вы можете просто проверить request.headers.host.

Если вы просто хотите проверить, разобранное имя хоста (домен), вы можете проверить request.info.hostname

server.route({ 
    method: 'GET', 
    path: '/', 
    handler: function(request, reply) { 

     var hostname = request.info.hostname;  

     reply('Ok'); 
    } 
}); 

Если вы хотите ограничить имена хостов, разрешенные для маршрута (или плагина), вы можете установить vhost вариант.

server.route({ 
    method: 'GET', 
    path: '/', 
    vhost: ['en.example.com'], 
    handler: function(request, reply) { 

     reply('Ok'); 
    } 
}); 

Для тестирования различных ВХостов с server.inject, вы можете просто включить явный заголовок узла

server.inject({ 
    method: 'GET', 
    url: '/', 
    headers: { 
     'Set-Cookie': 'mycookie=test', 
    }}, function(res) { 

     Assert(res.statusCode === 404); // 404 because not en.example.com 
}); 

server.inject({ 
    method: 'GET', 
    url: '/', 
    headers: { 
     'Set-Cookie': 'mycookie=test', 
     'Host': 'en.example.com' 
    }}, function(res) { 

     Assert(res.statusCode === 200); // 200 because en.example.com 
}); 
+1

Удивительного он работал и я никогда не думал, что я хотел бы получить ответ от кого-то, кто пишет [большие блог] (http://matt-harrison.com/moving-from-express-to-hapi-js/)! Благодаря! – iwatakeshi

+1

@iwatakeshi Спасибо :) –

Смежные вопросы