如何正确互联 Apollo Server/mongodb/express?

How to properly interconnect Apollo Server / mongodb / express?

我正在尝试使用 express 来提供我的静态图像。我试图在下面的代码中将 express 与 Apollo Server 集成。不幸的是,这样做时,mongodb 数据不再显示在前端。我的代码有什么问题或者 ApolloServer/Mongodb/Express 不兼容吗?

作为旁注,当我删除所有 express 内容并简单地 return server.listen() 等时,它完美地工作(所以我意识到断开连接是通过 express 实现的)

index.js

const { ApolloServer, PubSub } = require("apollo-server-express");
const mongoose = require("mongoose");

const { createWriteStream, existsSync, mkdirSync } = require("fs");
const path = require("path");
const express = require("express");

const typeDefs = require("./graphql/typeDefs");
const resolvers = require("./graphql/resolvers");
const { MONGODB } = require("./config.js");

const pubsub = new PubSub();

//server instance
const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: ({ req }) => ({ req, pubsub }),
});

const app = express();
app.use("/images", express.static(path.join(__dirname, "../images")));
server.applyMiddleware({ app });

mongoose
  .connect(MONGODB, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => {
    console.log("MongoDB Connected");
    return app.listen(5000, () => {
      console.log(`  Server ready at http://localhost:5000/`);
    });
  })

默认情况下,apollo-server-express/graphql 公开您的 GraphQL 端点,而不是像 apollo-server 那样在 / 公开您的 GraphQL 端点。您可以通过向 applyMiddleware 提供 path 选项来自定义此行为。但是,在这种情况下,我不会将路径更改回 /——而是只需修改您的客户端代码以将请求发送到正确的 URL.