在Udemy GraphQL教程中使用Apollo-Express-Server遇renderGraphiQL错误求助
Hey there! Let's work through this frustrating error you're hitting while setting up GraphiQL and Apollo Server. That TypeError: Cannot read property 'startsWith' of undefined at renderGraphiQL almost always happens because the function isn't getting the expected input it needs to generate the GraphiQL interface. Here are the most likely fixes to try:
1. Check for Apollo Server Version Mismatches
Chances are the tutorial uses an older version of apollo-server-express than what you have installed, and the API for enabling GraphiQL has changed between versions:
- If you're on Apollo Server v3+, you don't need to manually call
renderGraphiQLanymore. Enable it directly in the server constructor:const server = new ApolloServer({ typeDefs, resolvers, introspection: true, // Required for GraphiQL to access your schema playground: true // Use `graphiql: true` instead if you're on v4+ }); await server.start(); server.applyMiddleware({ app }); - To match the tutorial's version exactly, check the package.json in the tutorial's repo (if available) and install that specific version with
npm install apollo-server-express@<version-number>.
2. Fix Manual GraphiQL Route Configuration
If you're manually setting up a route for GraphiQL instead of using Apollo Server's built-in options, make sure you're passing the full req object to renderGraphiQL. The error pops up because the function tries to run req.url.startsWith() but req or req.url is undefined. Here's the correct setup:
const { renderGraphiQL } = require('apollo-server-express'); app.get('/graphiql', (req, res) => { res.send(renderGraphiQL({ endpointURL: '/graphql', // Match your actual GraphQL endpoint path req: req // Explicitly pass the request object to renderGraphiQL })); });
Double-check that you aren't omitting the req parameter in your route handler (like using () instead of (req, res)).
3. Verify Request Object Integrity
If you have custom middleware running before your GraphiQL route, it might be modifying or stripping the req object. Try disabling non-essential middleware temporarily to see if the error goes away. If it does, adjust that middleware to preserve req.url and other core properties.
If none of these solutions work, could you share a snippet of your server setup code (the part where you configure Apollo Server and GraphiQL)? That would help pinpoint exactly what's causing the issue.
内容的提问来源于stack exchange,提问作者user9630712

