2016-06-07 4 views
2

У меня есть приложение КоА с обработчиком, как это:Получить IP клиента в Koa.js

router.get('/admin.html', function *(next) { 
    const clientIP = "?"; 
    this.body = `Hello World ${clientIp}`; 
}); 

, где я должен получить IP-адрес клиента, чтобы сформировать ответ. Как я могу назначить clientIp, поэтому он ссылается на IP-адрес, из которого возникает запрос.

ответ

4

Коа 1:

Предполагая, что у вас нет обратного прокси-сервера на месте, вы можете использовать this.request.ip так:

router.get('/admin.html', function *(next) { 
    const clientIP = this.request.ip; 
    this.body = `Hello World ${clientIP}`; 
}); 

Эта функция описана в документации request. Вы всегда можете получить доступ к указанному объекту request как this.request.

Если у вас есть обратный прокси-сервер на месте, вы всегда получите IP-адрес обратного прокси-сервера. В этом случае это более сложно: в конфигурации обратного прокси-сервера вам нужно добавить специальный заголовок, например. X-Orig-IP с оригинальным IP-адресом клиента.

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

const clientIp = this.request.headers["X-Orig-IP"]; 

Коа 2:

Подход весьма похож, только синтаксис немного отличается:

router.get('/', async (ctx, next) => { 
    const clientIP = ctx.request.ip; 
    ctx.body = `Hello World ${clientIP}`; 
}) 
+0

Любая идея, как это будет работать в Koa2? – Qasim

+0

@ Qasim Я приведу пример. –

+0

@ Qasim См. Обновленный ответ! –

2

Если вы добавите app.proxy=true , вы все равно можете использовать request.ip без h чтобы беспокоиться о заголовках IP.

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