【问题标题】:How do I make a Hapi plugin work only with a specific domain or subdomain?如何使 Hapi 插件仅适用于特定域或子域?
【发布时间】:2019-02-17 17:18:21
【问题描述】:

我的 Hapijs 项目中有以下内容:

API 插件 前端插件

然后我有一个服务器文件夹,其中包含我的主 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?他们需要是两个独立的服务器吗?

提前致谢。

【问题讨论】:

    标签: javascript node.js subdomain url-routing hapijs


    【解决方案1】:

    我不相信这是可能的,但是您可以使用生命周期方法来访问当前路径和域,然后您可以在代码中插入某种逻辑来处理当前域。

    例如,根据您的需求在订单之前或之后更改生命周期。

    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;
            })
        }
    };
    

    【讨论】:

    • 我将阅读 server.ext。这个答案让我找到了我的解决方案。
    猜你喜欢
    • 2023-03-07
    • 2021-05-16
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多