Hus*_*tib 10 javascript node.js graphql apollo-server next.js
我在尝试检查 apollo graphql 是否正常工作时收到此错误。错误:您必须await server.start()在调用之前server.createHandler()
注意:有一个类似的问题,但我没有使用express错误:您必须在调用`server.applyMiddleware()`之前`await server.start()`
//api/graphql.js
import { ApolloServer } from "apollo-server-micro";
import { resolvers } from "../../apis/resolver";
import { typeDefs } from "../../apis/schemas";
const apolloServer = new ApolloServer({ typeDefs, resolvers });
export const config = {
api: {
bodyParser: false
}
};
export default apolloServer.createHandler({ path: "/api/graphql" });
Run Code Online (Sandbox Code Playgroud)
//解析器
import axios from "axios";
export const resolvers = {
Query: {
getUsers: async () => {
try {
const users = await axios.get("https://api.github.com/users");
return users.data.map(({ id, login, avatar_url }) => ({
id,
login,
avatar_url
}));
} catch (error) {
throw error;
}
},
getUser: async (_, args) => {
try {
const user = await axios.get(
`https://api.github.com/users/${args.name}`
);
return {
id: user.data.id,
login: user.data.login,
avatar_url: user.data.avatar_url
};
} catch (error) {
throw error;
}
}
}
};
Run Code Online (Sandbox Code Playgroud)
//模式
import { gql } from "apollo-server-micro";
export const typeDefs = gql`
type User {
id: ID
login: String
avatar_url: String
}
type Query {
getUsers: [User]
getUser(name: String!): User!
}`
Run Code Online (Sandbox Code Playgroud)
bri*_*lov 22
这对我有用,是从 prisma 的人那里复制的。
import Cors from "micro-cors";
import schema from "graphql/schema";
import { ApolloServer } from "apollo-server-micro";
import { PageConfig } from "next";
import { createContext } from "graphql/context";
export const config: PageConfig = {
api: {
bodyParser: false,
},
};
const cors = Cors();
const server = new ApolloServer({
context: createContext,
schema,
});
const startServer = server.start();
export default cors(async (req, res) => {
if (req.method === "OPTIONS") {
res.end();
return false;
}
await startServer;
await server.createHandler({ path: "/api/graphql" })(req, res);
});
Run Code Online (Sandbox Code Playgroud)
如果您正在使用非无服务器框架的集成包(例如express, micro),则必须在创建 , 后立即await调用, ,然后再将其附加到您的 Web 框架并开始接受请求。如果服务器已启动,此assertStarted()方法将断言。更多信息请参见源码注释startApolloServer
有一些例子,请参阅apollo-server-micro包和这个
const { ApolloServer, gql } = require('apollo-server-micro');
const typeDefs = gql`
type Query {
sayHello: String
}
`;
const resolvers = {
Query: {
sayHello(parent, args, context) {
return 'Hello World!';
},
},
};
const apolloServer = new ApolloServer({ typeDefs, resolvers });
module.exports = apolloServer.start().then(() => {
return apolloServer.createHandler({ path: '/data' });
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5648 次 |
| 最近记录: |