【问题标题】:How to access underlying express app in Keystone 6?如何在 Keystone 6 中访问底层 express 应用程序?
【发布时间】:2021-10-03 12:30:11
【问题描述】:

我在后端使用 Keystone 6,并且正在尝试集成 Stripe,这需要访问底层的 express 应用程序才能将客户端密码从服务器传递给客户端。这在 Stripe 文档中突出显示:https://stripe.com/docs/payments/payment-intents#passing-to-client

我在弄清楚如何在 Keystone 6 中访问 express 应用程序时遇到了麻烦,而且他们似乎没有在文档中提及任何关于此的内容。任何帮助将不胜感激。

【问题讨论】:

    标签: javascript express keystonejs


    【解决方案1】:

    简短的回答是 Keystone 6 尚不支持此功能。

    较长的答案有两部分:

    此功能即将推出

    我们一直在内部讨论此要求,并提高了它的优先级。我们将在下周更新公共路线图以反映这一点。 功能本身应该很快就会出现。 (很遗憾,我无法确定发布日期。)

    访问 Express 应用是可能的,但现在真的很痛苦

    如果您查看 Keystone 的 start 命令,您可以看到它在哪里 calls createExpressServer()。 这只是返回一个带有 GraphQL API 和其他一些小东西的快速应用程序。 但实际上并没有强迫你使用 keystone start 命令中的构建 - 你可以复制这段代码,修改它,然后直接自己运行。

    例如。你可以替换这个...

    const server = await createExpressServer(
      config,
      graphQLSchema,
      keystone.createContext,
      false,
      getAdminPath(cwd)
    );
    

    随着...

    const server = express();
    server.get('/hello-world', (req, res) => {
      res.send('Hello');
    });
    
    const keystoneServer = await createExpressServer(
      config,
      graphQLSchema,
      keystone.createContext,
      false,
      getAdminPath(cwd)
    );
    server.use(keystoneServer);
    

    您的/hello-world 端点应该优先于 Keystone 添加的内容。

    很遗憾,这不适用于 dev 命令,因此,在您的本地环境中,您需要以不同的方式执行此操作。

    一种选择是启动您控制的第二个快速服务器并将其放在不同的端口上,并在其中包含您的自定义路由。 您仍然可以在 Keystone 应用程序代码库中执行此操作,但在不同环境中使用不同的 URL 可能会很烦人。 您可能只需要为您的自定义端点 URL 设置一个环境变量,在生产环境中使用如下值:

    # Production
    GRAPHQL_ENDPOINT="https://api.example.com/api/graphql"
    CUSTOM_ENDPOINT="https://api.example.com/hello-world"
    

    这在开发中:

    # Dev
    GRAPHQL_ENDPOINT="http://localhost:3000/api/graphql"
    CUSTOM_ENDPOINT="http://localhost:3100/hello-world"
    

    它很丑,但它确实有效。

    当“官方”功能登陆时,我会更新这个答案。

    【讨论】:

    • 干杯,感谢您的详细回答。期待完成的 Keystone 6。
    • Keystone 6 (keystonejs.com/releases/2021-07-29) 的最新版本现在允许您为自定义 Next.js 页面 (keystonejs.com/docs/guides/custom-admin-ui-pages) 添加路由。请注意,这不会让您“访问底层的 express 应用程序”——因此不能解决原始问题带来的 Stripe webhook 问题——但它确实有助于一些相关的用例。能够在 Express 级别添加任意路线仍在进行中。
    猜你喜欢
    • 2019-10-30
    • 2022-01-06
    • 2015-06-19
    • 2021-05-30
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2011-02-11
    相关资源
    最近更新 更多