Как я могу вернуть список задач, используя grpc nodejs, результат пуст:
Однако, когда я пытаюсь сделать это без grpc, он возвращает список с данными, но когда я пытаюсь получить список задачс grpc он возвращает пустой результат { todo: [] }
Примечание : другие функции, такие как Вставить обновление Удалить ReadOne, работают без сбоев.Только Не получить список всех Todos
Рабочий код без gRPC, указанный в последнем
Вот мой сервер gRPC
const PROTO_PATH = __dirname + '../../../protos/todo.proto';
const grpc = require('grpc');
var protoLoader = require('@grpc/proto-loader');
var packageDefinition = protoLoader.loadSync(PROTO_PATH, { keepCase: true, oneofs: true });
var todoproto = grpc.loadPackageDefinition(packageDefinition).todoproto;
const server = new grpc.Server();
server.addService(todoproto.TodoService.service, {
list: function (_, callback) {
TodoDb.list(callback);
},
});
// gRPC Server
server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure());
console.log('grpc server starting on :', '0.0.0.0:50051');
server.start();
console.log('grpc server running on :', '0.0.0.0:50051');
Здесьмой клиент gRPC
const PROTO_PATH = __dirname + '../../../../protos/todo.proto';
const grpc = require('grpc');
var protoLoader = require('@grpc/proto-loader');
var packageDefinition = protoLoader.loadSync(
PROTO_PATH, {
keepCase: true, enums: String, defaults: true, arrays: true, objects: true, oneofs: true
});
var todoproto = grpc.loadPackageDefinition(packageDefinition).todoproto;
// The protoDescriptor object has the full package hierarchy
var client = new todoproto.TodoService('0.0.0.0:50051', grpc.credentials.createInsecure());
try {
client.list({}, (error, todo) => {
console.log(todo);
if (todo) { console.log('Passed.') }
});
} catch (error) {
console.log(error.message);
}
var command = process.argv.shift();
if (command == 'list')
todosList();
Код рабочего теста
var assert = {
list: function (_, callback) {
TodoDb.list(callback);
},
};
try {
assert.list({}, (error, todo) => {
console.log(todo);
if (todo) { console.log('Passed.') }S
});
} catch (error) {
console.log(error.message);
}
Код теста вне теста
[ { done: false,
createdate: 2018-09-16T14:46:43.855Z,
id: 6,
title: 'Todo App',
description: 'Complete project Before 22 September' },
{ done: false,
createdate: 2018-09-16T14:46:43.855Z,
id: 7,
title: 'Todo App',
description: 'Complete project Before 22 September' },
{ done: false,
createdate: 2018-09-16T14:46:43.855Z,
id: 5,
title: 'Todo App',
description: 'Complete project Before 22 September' } ]
Passed.
. Proto File
syntax = "proto3"; //Using proto3 version.
package todoproto;
service TodoService {
rpc List (Empty) returns (TodoList){}
rpc Insert (Todo) returns (Empty){}
rpc Get (TodoId) returns (Todo){}
rpc Update (Todo) returns (Todo){}
rpc Delete (TodoId) returns (Empty){}
}
message Empty {}
message Todo {
int32 id = 1;
string title = 2;
string description = 3;
}
message TodoList {
repeated Todo todo = 1;
}
message TodoId {
int32 id = 1;
}