如果可以使用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
只需几个步骤,并且您的阿波罗服务器配置没有变化
// 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}`));