Bol*_*dek 31 error-handling apollo server graphql nestjs
我正在尝试启动我的 nestJs 服务器,它一直给我这个错误:
UnhandledPromiseRejectionWarning:错误:您必须await server.start()
在调用server.applyMiddleware()
ApolloServer之前
我什至不确定从哪里调试,因为我对 NestJs 和 GraphQL 还是很陌生。
小智 12
对于 Apollo Server Express 3.0 及更高版本,您需要定义一个接受 typeDefs 和解析器参数的异步函数,然后将服务器分配给与之前相同的 Apollo 初始化,如下所示
async function startApolloServer(typeDefs, resolvers){
const server = new ApolloServer({typeDefs, resolvers})
const app = express();
await server.start();
server.applyMiddleware({app, path: '/graphql'});
app.listen(PORT, () => {
console.log(`Server is listening on port ${PORT}${server.graphqlPath}`);
})
}
startApolloServer(typeDefs, resolvers);
Run Code Online (Sandbox Code Playgroud)
我在升级Ben Awad 的 Graphql-Next-Typeorm[...] 堆栈时遇到了这个问题,只需在服务器启动时添加一个等待即可修复警告
const apolloServer = new ApolloServer({
introspection: true,
schema: await buildSchema({
resolvers: [__dirname + '/resolvers/**/*.js'],
validate: false
}),
context: ({ req, res }) => ({
req,
res,
redis: redisClient
}),
formatError
});
// added this line
await apolloServer.start();
apolloServer.applyMiddleware({
app,
cors: false
});
Run Code Online (Sandbox Code Playgroud)
完整的工作代码是:
const express = require("express");
const { ApolloServer } = require("apollo-server-express");
const http = require("http");
const app = express();
const typeDefs = `
type Query{
totalPosts: Int!
}
`;
const resolvers = {
Query: {
totalPosts: () => 100,
},
};
let apolloServer = null;
async function startServer() {
apolloServer = new ApolloServer({
typeDefs,
resolvers,
});
await apolloServer.start();
apolloServer.applyMiddleware({ app });
}
startServer();
const httpserver = http.createServer(app);
app.get("/rest", function (req, res) {
res.json({ data: "api working" });
});
app.listen(4000, function () {
console.log(`server running on port 4000`);
console.log(`gql path is ${apolloServer.graphqlPath}`);
});
Run Code Online (Sandbox Code Playgroud)
小智 5
降级不是一个选择(至少不再是)
这是解决方案=>
https://javascriptsu.wordpress.com/2021/08/02/apollo-error-must-await-server-start/
const server = new ApolloServer({ typeDefs, resolvers });
const app = express();
server.start().then(res => {
server.applyMiddleware({ app });
app.listen({ port: 3000 }, () =>
console.log("nice")
)
})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7673 次 |
最近记录: |