如果你可以使用apollo-server-express,只要你能在服务器上再次将protobuf转换为json,你就可以实现,我想protobuf.js可以做到。
apollo-server 或 apollo-server-express 需要请求正文中的三个密钥对值
-
操作名称
-
变量
-
查询
这是请求正文的样子(使用 morgan-body 记录)
如果你使用apollo-server-express,你可以使用你的自定义express middleware,你可以在其中将protobuf反序列化为json,并将json添加到req.body用于Apollo Server。
从 apollo-server 更改为 apollo-server-express 只需几个步骤,并且您的 apollo 服务器配置没有任何变化
// import it from apollo-server-express instead of apollo-server
const { ApolloServer } = require('apollo-server-express');
const express = require('express');
const app = express();
app.use((req, res, next) => {
// Intercept the request before it reaches the Apollo Server
// Use protobuf.js to deserialize the request body into json
// Add the json to req.body
// Call the next() to go to next middleware
next();
});
const server = new ApolloServer({/* Your apollo server config */})
server.applyMiddleware({ app });
app.listen({ port: 4000 }, () => console.log(`? Server ready at http://localhost:4000${server.graphqlPath}`));