如何正确互联 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.
我正在尝试使用 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.