Grafserv 简介
Grafserv - 一个由 Grafast 提供支持的,针对 Node.js 的超快 GraphQL 服务器。
用法
Grafserv 支持许多不同的服务器,并且由于每个服务器都不同,因此每个服务器都有自己的入口点,例如 grafserv/node
用于 Node.js HTTP 服务器,或者 grafserv/express/v4
用于 Express v4。通常,您从所选服务器的相关入口点导入 grafserv
函数,然后创建一个实例
const serv = grafserv({ schema, preset });
grafserv
传递要使用的 GraphQL 架构(如果可用,否则传递 null 或 promise 也可接受)和一个 graphile-config
预设 - 即您的配置。预设可以是一个空对象,但这里有一个更大的(但并非详尽的)示例
const preset = {
grafserv: {
port: 5678,
host: "0.0.0.0",
dangerouslyAllowAllCORSRequests: false,
graphqlPath: "/graphql",
eventStreamPath: "/graphql/stream",
graphqlOverGET: true,
graphiql: true,
graphiqlPath: "/",
websockets: true,
maxRequestLength: 100000,
},
};
调用 grafserv
将返回一个实例;该实例将具有一些辅助函数,包括特定于将其与您选择的框架集成的辅助函数。对于基于中间件的服务器,这通常是 serv.addTo(app)
(允许注册多个路由处理程序),尽管不同的服务器可能具有不同的 API,例如 Lambda 和 Next.js 的 serv.createGraphQLHandler()
。
注意:Grafserv 重新实现服务器可能具有的所有非 GraphQL 问题几乎没有价值,因此它依赖于您选择的服务器的生态系统来处理诸如压缩、速率限制、会话、cookie 等问题。例如,要压缩您的响应,您需要使用诸如 compression
(用于 Express)、koa-compress
(用于 Koa)或 @fastify/compress
(用于 Fastify)之类的模块。
serv.release()
释放实例创建的任何资源;不再处理任何请求(尽管当前正在处理的请求将被允许完成)。
// TODO: 考虑终止订阅或其他长期运行的事物。
serv.onRelease(cb)
将 cb
添加到服务器释放时要调用的回调列表中;这对于释放仅为服务器创建的资源很有用。回调将按添加的相反顺序调用。
serv.setSchema(newSchema)
替换用于未来请求的模式(当前正在处理的请求不受影响) - 这主要用于“监视”模式。
serv.setPreset(newPreset)
替换用于未来请求的配置(当前正在处理的请求不受影响) - 这主要用于“监视”模式。请注意,某些配置更改可能需要重新启动才能在某些服务器上反映出来。
serv.getSchema()
返回当前正在使用的 GraphQL 模式,或返回该模式的 Promise。
serv.getPreset()
返回当前正在使用的已解析 graphile-config
预设。