ApolloServer.applyMiddleware({express})获取UnhandledPromiseRejectionWarning:TypeError:无法读取属性'使用未定义

问题描述 投票:0回答:3

const { ApolloServer, gql } = require('apollo-server-express')

const express = require("express");
const next = require("next");

const dev = process.env.NODE_ENV === "development";
const app = next({ dev });
const handle = app.getRequestHandler();
app.prepare().then(() => {
  
  const apoloSrv = new ApolloServer({ typeDefs, resolvers });
  const server = express();
  apoloSrv.applyMiddleware({ server});
  
  server.get("*", (req, res) => handle(req, res));

  const PORT = process.env.PORT || 4000;
  server.listen(PORT, err => {
    if (err) throw err;
    console.log(`Ready on :${PORT}`);
  });
});

以下是apollo-server-express使用nextjs连接express框架的代码片段

这里我想使用 apollo-server-express 2.0 配置 graphql 。 当我使用 Node server.js 使用此代码时,我收到以下错误消息,例如,

“(节点:2904)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性‘use’”

有人可以看一下并让我知道这里有什么问题吗?

express apollo-client next.js apollo-server express-graphql
3个回答
13
投票

文档中的示例是:

const app = express();
server.applyMiddleware({ app });

这意味着您正在将一个对象传递给

applyMiddleware
。在示例中,我们传入的对象是使用 ES2015 引入的属性名称简写表示法来初始化的。上面相当于:

server.applyMiddleware({ app: app });

我们的对象有一个名为 app 的属性,其值等于一个恰好也称为 app 的变量。如果你这样做:

const myApp = express()
server.applyMiddleware({ myApp });

这意味着您传入的对象具有

myApp
属性,更重要的是,缺少
app
函数期望的
applyMiddleware
属性。所以...您的代码需要如下所示:

apoloSrv.applyMiddleware({ app: server});

0
投票
const express = require("express");
const router = express.Router();
const { ApolloServer, gql } = require('apollo-server-express');

const server = new ApolloServer({
    schema: schema,
    introspection: true
}); 

server.applyMiddleware({ app:router });

module.exports = router;


0
投票

而不是使用:

server.applyMiddleware(app)

用这个:

server.applyMiddleware({ app })

© www.soinside.com 2019 - 2024. All rights reserved.