node.js - 调用 gRPC 服务器不会在 Node 中返回预期数据

标签 node.js grpc

我正在尝试使用 this 创建一个简单的 Notes CRUD API教程。该教程声称从客户端调用服务器(node get_notes.js)中的List方法应该返回notes数组,但我总是得到一个空物体。

server.js

const grpc = require('grpc')
const protoLoader = require('@grpc/proto-loader')
const packageDefinition = protoLoader.loadSync('notes.proto');
const notesProto = grpc.loadPackageDefinition(packageDefinition);

const notes = [
    { id: '1', title: 'Note 1', content: 'Content 1'},
    { id: '2', title: 'Note 2', content: 'Content 2'}
]

const server = new grpc.Server()

server.addService(notesProto.NoteService.service, {
    list: (_, callback) => {
        callback(null, notes)
    },
})

server.bind('127.0.0.1:50051', grpc.ServerCredentials.createInsecure())
console.log('Server running at http://127.0.0.1:50051')
server.start()

client.js

const grpc = require('grpc')
const protoLoader = require('@grpc/proto-loader')

const packageDefinition = protoLoader.loadSync('notes.proto');
const notesProto = grpc.loadPackageDefinition(packageDefinition);

const NoteService = notesProto.NoteService

const client = new NoteService('localhost:50051',
    grpc.credentials.createInsecure())
module.exports = client

get_notes.js

const client = require('./client')
client.list({}, (error, notes) => {
    if (!error) {
        console.log('successfully fetch List notes')
        console.log(notes)
    } else {
        console.error(error)
    }
})

notes.proto

syntax = "proto3";

service NoteService {
    rpc List (Empty) returns (NoteList) {}
}
message Empty {}

message Note {
    string id = 1;
    string title = 2;
    string content = 3;
}

message NoteList {
   repeated Note notes = 1;
}

最佳答案

您的 NoteList 消息类型包含一个字段 notes,它是 Note 消息的列表。要发送该类型的消息,您需要发送一个带有单个字段的对象,该字段是类似 Note 的对象列表。在本例中,应该如下所示:

const notes = { notes: [
    { id: '1', title: 'Note 1', content: 'Content 1'},
    { id: '2', title: 'Note 2', content: 'Content 2'}
  ]
}

关于node.js - 调用 gRPC 服务器不会在 Node 中返回预期数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57949908/

相关文章:

javascript - 将 NODE_ENV 传递到 Windows 10 的 npm 脚本中

protocol-buffers - 原始消息的差异及其属性的相对位置

c++ - grpc/c++ 握手器工厂创建失败,并显示 TSI_INVALID_ARGUMENT

c++ - 为 Android 编译 C++ gRPC

javascript - 将对象从 jade 传递到 angularjs 模板

node.js - 是否在 Mongoose 良好实践之上使用 Joi 进行验证?

node.js - 使用 Pino 作为 Sequelize 的记录器

javascript - 如何仅使用 uglifyjs 缩小文件?

c++ - 编译 grpc c++ 应用程序获取对 `event_store::Event::Event(google::protobuf::Arena*)' 的 undefined reference

java - 什么时候应该在 GRPC 上关闭 channel ?