Skip to content

Commit

Permalink
Bugfix/#109/return data parameter for client (#110)
Browse files Browse the repository at this point in the history
* Return data parameter in error message if included. Refs #109

* Allow user to add 'data' parameter to error response from server

* Add tests for data parameter

* Update doc for _raiseError
  • Loading branch information
isaacgr committed Oct 24, 2021
1 parent 166c2b6 commit 4fef60a
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 4 deletions.
10 changes: 6 additions & 4 deletions src/client/protocol/base.js
Expand Up @@ -211,9 +211,9 @@ class JsonRpcClientProtocol {
} else if (message.error) {
// got an error back so reject the message
const { id } = message;
const { code } = message.error;
const { code, data } = message.error;
const errorMessage = message.error.message;
this._raiseError(errorMessage, code, id);
this._raiseError(errorMessage, code, id, data);
} else if ("result" in message) {
// Got a result, so must be a response
this.gotResponse(message);
Expand Down Expand Up @@ -563,16 +563,18 @@ class JsonRpcClientProtocol {
* @param {string} message Error message
* @param {number} code Error code
* @param {string|number=} id ID for error message object
* @param {*=} data Optional data to include about the error
* @throws Error
* @private
*/
_raiseError(message, code, id) {
_raiseError(message, code, id, data) {
const error = formatError({
jsonrpc: this.version,
delimiter: this.delimiter,
id,
code,
message
message,
data
});
throw new Error(error);
}
Expand Down
2 changes: 2 additions & 0 deletions src/server/protocol/base.js
Expand Up @@ -302,6 +302,7 @@ class JsonRpcServerProtocol {
.catch((resError) => {
error.code = ERR_CODES.internal;
error.message = `${JSON.stringify(resError.message || resError)}`;
error.data = resError.data;
reject(formatError(error));
});
} else {
Expand All @@ -318,6 +319,7 @@ class JsonRpcServerProtocol {
error.message = ERR_MSGS.unknown;
// error.data = e.message;
}
error.data = e.data;
reject(formatError(error));
}
});
Expand Down
49 changes: 49 additions & 0 deletions tests/issues/#109-no-data-response.test.js
@@ -0,0 +1,49 @@
const { expect } = require("chai");
const Jaysonic = require("../../src");
const { server } = require("../test-server");

const tcpclient = new Jaysonic.client.tcp();

server.method("dataError", () => {
const error = new Error("errrorWithData");
error.data = [{ foo: "bar" }];
throw error;
});

server.method(
"promise.dataError",
() => new Promise((resolve, reject) => {
const error = new Error("reject");
error.data = [{ foo: "bar" }];
reject(error);
})
);

describe("#109 Return Data Parameter from Client", () => {
describe("client", () => {
before(async () => {
await server.listen();
await tcpclient.connect();
});
after(async () => {
await tcpclient.end();
await server.close();
});
it("should return data parameter from client if server responds with one", async () => {
try {
await tcpclient.send("dataError");
} catch (e) {
expect(e.error).to.have.property("data");
expect(e.error.data).to.be.eql([{ foo: "bar" }]);
}
});
it("should return data parameter from client if server responds with one from a promise method", async () => {
try {
await tcpclient.send("promise.dataError");
} catch (e) {
expect(e.error).to.have.property("data");
expect(e.error.data).to.be.eql([{ foo: "bar" }]);
}
});
});
});

0 comments on commit 4fef60a

Please sign in to comment.