简短的回答是 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"
它很丑,但它确实有效。
当“官方”功能登陆时,我会更新这个答案。