Javascript Next.js grpc节点使用情况
我使用了,但在应用程序中初始化服务时遇到问题 目标:在应用程序中只创建一次客户端服务,并在Javascript Next.js grpc节点使用情况,javascript,typescript,next.js,grpc,grpc-node,Javascript,Typescript,Next.js,Grpc,Grpc Node,我使用了,但在应用程序中初始化服务时遇到问题 目标:在应用程序中只创建一次客户端服务,并在getServerSideProps中使用它(应用程序不使用客户端路由) 例如,我们使用生成了一个服务(仅在SSR上可用),然后我只想在某个地方初始化它。起初我认为它可以在定制的server.js中实现: const { credentials } = require('@grpc/grpc-js'); const express = require("express"); const
getServerSideProps
中使用它(应用程序不使用客户端路由)
例如,我们使用生成了一个服务(仅在SSR上可用),然后我只想在某个地方初始化它。起初我认为它可以在定制的server.js中实现:
const { credentials } = require('@grpc/grpc-js');
const express = require("express");
const next = require("next");
const { MyserviceClient } = require('./gen/myservice_grpc_pb');
const dev = process.env.NODE_ENV !== "production";
const app = next({ dev });
const handle = app.getRequestHandler();
// Init & Export
exports.myService = new MyserviceClient(
'http://localhost:3000',
credentials.createInsecure(),
);
(async () => {
await app.prepare();
const server = express();
server.get("*", (req, res) => handle(req, res));
server.listen(process.env.PORT, () => {
console.log(`Listening at http://localhost:${process.env.PORT}`);
});
})();
const { credentials } = require('@grpc/grpc-js');
const { MyserviceClient } = require('./gen/myservice_grpc_pb');
module.exports = {
serverRuntimeConfig: {
myService: new MyserviceClient(
'http://localhost:3000',
credentials.createInsecure(),
),
},
};
然后在主页上使用,例如:
import React from 'react';
const { GetSmthRequest } = require('../gen/myservice_pb');
const { myService } = require('../server.js');
const IndexPage = () => (
<div>
<span>My HomePage</span>
</div>
)
const getServerSideProps = async () => {
const request = new GetSmthRequest();
request.setSomeStuff('random');
myService.getStmh(GetSmthRequest, (err, res) => {
//...
})
return {
props: {
}
}
}
export default IndexPage;
此解决方案有效,因此我可以通过serverRuntimeConfig
使用该服务,从而在整个应用程序中仅初始化一次,但当我使用getServerSideProps
在某处发出请求时,我会收到一个错误:
请求消息序列化失败:应为类型为的参数
错误解释:()
该错误消息表示消息序列化失败
(将传递给gRPC的消息对象转换为二进制数据)
失败。这通常是因为消息对象没有
与预期的消息类型匹配,否则无效
有人知道我为什么会犯这个错误吗?
看到一些将Next.js与grpc节点一起使用的示例也很有趣。对于这种情况,您可以使用