如何修改GraphQL Yoga与BunJS项目的运行端口?
修改GraphQL Yoga + Bun服务端口的解决办法
- 核心原因:你当前是用Bun的
serve方法启动服务,而非Yoga自带的服务器,因此需要在Bun.serve的配置中指定端口,而非Yoga的配置项里设置。
直接指定端口的修改方案
将原代码中Bun.serve(yoga)改为包含port参数的配置对象,示例如下:
import { createSchema, createYoga } from 'graphql-yoga' const yoga = createYoga({ schema: createSchema({ typeDefs: /* GraphQL */ ` type Query { greetings: String } `, resolvers: { Query: { greetings: () => 'Hello from Yoga in a Bun app!' } } }) }) // 修改此处,添加port配置 const server = Bun.serve({ ...yoga, port: 4000 // 替换成你想要的端口号 }) console.info( `Server is running on ${new URL( yoga.graphqlEndpoint, `http://${server.hostname}:${server.port}` )}` )
环境变量动态指定端口(推荐生产环境使用)
如果需要灵活切换端口,可以通过环境变量传递,代码修改如下:
import { createSchema, createYoga } from 'graphql-yoga' const yoga = createYoga({ schema: createSchema({ typeDefs: /* GraphQL */ ` type Query { greetings: String } `, resolvers: { Query: { greetings: () => 'Hello from Yoga in a Bun app!' } } }) }) const server = Bun.serve({ ...yoga, port: Number(process.env.PORT) || 3000 // 优先读取环境变量,默认3000 }) console.info( `Server is running on ${new URL( yoga.graphqlEndpoint, `http://${server.hostname}:${server.port}` )}` )
启动时通过环境变量指定端口:
PORT=5000 bun run your-file-name.ts
补充说明
Yoga本身的配置里也有port选项,但该选项仅在调用yoga.start()启动自带服务器时生效。当你用Bun.serve托管Yoga的请求处理器时,端口控制权在Bun手里,所以必须在Bun.serve的配置中设置端口。
内容的提问来源于stack exchange,提问作者Abner Matheus
相关产品推荐
相关产品推荐

