Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Next.js grpc节点使用情况_Javascript_Typescript_Next.js_Grpc_Grpc Node - Fatal编程技术网

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节点一起使用的示例也很有趣。

对于这种情况,您可以使用