Как заставить плагин Hapi работать только с конкретным доменом или поддоменом? - PullRequest
0 голосов
/ 17 февраля 2019

В моем проекте Hapijs есть следующее:

Плагин API Плагин Frontend

Затем у меня есть папка сервера, в которой находится мой основной файл index.js, где запускается сервер Hapi.Я связываю все вместе в папке моего сервера с помощью плагина Glue: https://www.npmjs.com/package/glue

Проблема, с которой я столкнулся, заключается в том, что я хочу использовать поддомен для моего API, например api.locahost: 8000 (api.domain.com).Однако, независимо от того, какой тип субдомена я ввожу, я могу получить доступ к своему сайту.

Кроме того, это похоже на random.localhost: 8000 перенаправлений на locahost: 8000, и я по-прежнему могу получить доступ ко всем страницам моего сайта.

Вот мой код:

'use strict';

const Dotenv = require('dotenv');
Dotenv.config({ path: `${__dirname}/.env` });
const Glue = require('glue');

const manifest = {
    server: {
        port: process.env.PORT,
        host: process.env.HOST
    },
    register: {
        plugins: [
            {
                plugin: '~/api',
                options: {
                    routes: {
                        vhost: process.env.SUBDOMAIN //api.localhost
                    }
                }
            },
            {
                plugin: '~/lib'
            }
        ],
        options: {
        }
    }
};

const options = {
    relativeTo: __dirname
};

const startServer = async function () {

    try {
        const server = await Glue.compose(manifest, options);
        await server.start();
        await console.log(`Server running at: ${server.info.uri}`);

    }
    catch (err) {
        console.error(err);
        process.exit(1);
    }
};

startServer();

Если вам интересно, что такое "lib", это имя моего внешнего каталога.Если вы посмотрите в настройках плагина API, вы увидите, где я добавил свой поддомен.

Как я могу сделать так, чтобы мой плагин внешнего интерфейса использовал только localhost: 8000, а мой плагин API использовал только api.localhost: 8000?Должны ли они быть двумя отдельными серверами?

Заранее спасибо.

1 Ответ

0 голосов
/ 18 февраля 2019

Я не верю, что это возможно, но вы можете использовать методы жизненного цикла для доступа к текущему пути и домену, а затем вы можете вставить некоторую логику в ваш код для обработки текущего домена.

Например,, измените жизненный цикл в зависимости от ваших потребностей до или после заказа.

exports.plugin = {    
    register: async function (server, options) {
        server.ext('onPreHandler', async (request, h) => {
            if(request.info.host !== 'YOUR_DOMAIN') return h.continue;
            // you can check request.path also

            // rest of the code...


            return h.continue;
        })
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...