Có vẻ như tôi đã thiết lập máy chủ theo tài liệu của Apollo tại http://dev.apollodata.com/tools/apollo-server/setup.html. Trong máy chủ/main.js tập tin của tôi:Thiết lập Máy chủ Apollo với đăng ký-vận chuyển-w?
//SET UP APOLLO INCLUDING APOLLO PUBSUB
const executableSchema = makeExecutableSchema({
typeDefs: Schema,
resolvers: Resolvers,
connectors: Connectors,
logger: console,
});
const GRAPHQL_PORT = 8080;
const graphQLServer = express();
// `context` must be an object and can't be undefined when using connectors
graphQLServer.use('/graphql', bodyParser.json(), apolloExpress({
schema: executableSchema,
context: {}, //at least(!) an empty object
}));
graphQLServer.use('/graphiql', graphiqlExpress({
endpointURL: '/graphql',
}));
graphQLServer.listen(GRAPHQL_PORT,() => console.log(
`GraphQL Server is now running on http://localhost:${GRAPHQL_PORT}/graphql`
));
//SET UP APOLLO INCLUDING APOLLO PUBSUB
Nó in ra "GraphQL Server bây giờ đang chạy trên http://localhost:8080/graphql" để đăng nhập thiết bị đầu cuối cho thấy rằng các máy chủ đã được khởi tạo thành công.
Nhưng ở phía trên cùng của phần main_layout của tôi, khi tôi chạy mã này:
import { Client } from 'subscriptions-transport-ws';
const wsClient = new Client('ws://localhost:8080');
... tôi nhận được giao diện điều khiển này thông điệp:
kết nối WebSocket để 'ws: // localhost : 8080/'không thành công: Đã đóng kết nối trước khi nhận được phản hồi bắt tay
Tôi đang thiếu gì?
Mã bạn đánh dấu trong GitHunt-API/api/index.js, không tham chiếu lược đồ và tài liệu Apollo nói lược đồ phải được tham chiếu trong khi thiết lập máy chủ. Giản đồ được tham chiếu bên trên mã được đánh dấu, trên dòng 66, nhưng đó là dành cho người nghe trên một cổng khác mà dường như chủ yếu liên quan đến API GitHub. Nó sẽ là chính xác để nói rằng tôi cần phải sửa đổi mã cổng 3010 để bỏ qua tài liệu tham khảo để GitHub? – VikR
Nếu bạn muốn thiết lập các mục đăng ký (vì chúng là ngay bây giờ), bạn cần một đối tượng lược đồ sẽ được cung cấp cho hàm tạo SubscriptionManager (mà tôi đã chỉ ra phần cuối cùng của câu trả lời). được cấp cho lớp Server từ gói 'subscriptions-transport-ws'. Tham chiếu ở trên có liên quan đến điểm cuối POSTQL POST chỉ phục vụ các đột biến và truy vấn. Sau khi tất cả các cấu hình này, bạn sẽ được trái với hai máy chủ trên các cổng khác nhau, một cho điểm cuối GraphQL và một cho websocket để đẩy các sự kiện cho khách hàng. – davidyaha
Một cổng websocket chuyên dụng là không cần thiết - xem câu trả lời của tôi. – antirealm