diff options
author | 2016-04-27 14:55:13 -0700 | |
---|---|---|
committer | 2016-04-27 14:55:13 -0700 | |
commit | 92b8decaff5dae78531af309b241babe03c54f01 (patch) | |
tree | e2c768e5938e482931a4b161f0e9e7b8898de7cf /src/node/src/server.js | |
parent | 8658b1786628c8cb10ea0a74e7a11733f66a20ab (diff) |
Make Node servers warn instead of fail when a method is missing a handler
Diffstat (limited to 'src/node/src/server.js')
-rw-r--r-- | src/node/src/server.js | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/node/src/server.js b/src/node/src/server.js index 22128343a9..fd5153f124 100644 --- a/src/node/src/server.js +++ b/src/node/src/server.js @@ -684,6 +684,26 @@ Server.prototype.register = function(name, handler, serialize, deserialize, return true; }; +var unimplementedStatusResponse = { + code: grpc.status.UNIMPLEMENTED, + details: 'The server does not implement this method' +}; + +var defaultHandler = { + unary: function(call, callback) { + callback(unimplementedStatusResponse); + }, + client_stream: function(call, callback) { + callback(unimplementedStatusResponse); + }, + server_stream: function(call) { + call.emit('error', unimplementedStatusResponse); + }, + bidi: function(call) { + call.emit('error', unimplementedStatusResponse); + } +}; + /** * Add a service to the server, with a corresponding implementation. If you are * generating this from a proto file, you should instead use @@ -713,16 +733,18 @@ Server.prototype.addService = function(service, implementation) { method_type = 'unary'; } } + var impl; if (implementation[name] === undefined) { - throw new Error('Method handler for ' + attrs.path + - ' not provided.'); + console.warn('Method handler for %s expected but not provided', + attrs.path); + impl = defaultHandler[method_type]; + } else { + impl = _.bind(implementation[name], implementation); } var serialize = attrs.responseSerialize; var deserialize = attrs.requestDeserialize; - var register_success = self.register(attrs.path, - _.bind(implementation[name], - implementation), - serialize, deserialize, method_type); + var register_success = self.register(attrs.path, impl, serialize, + deserialize, method_type); if (!register_success) { throw new Error('Method handler for ' + attrs.path + ' already provided.'); |