diff --git a/packages/jsonrpc/src/express.test.ts b/packages/jsonrpc/src/express.test.ts index 3527931..9108811 100644 --- a/packages/jsonrpc/src/express.test.ts +++ b/packages/jsonrpc/src/express.test.ts @@ -56,16 +56,17 @@ describe('jsonrpc', () => { function createApp() { const app = express() app.use(bodyParser.json()) - app.use('/myService', + app.use('/', jsonrpc(req => ({userId: 1000}), noopLogger) - .addService(new Service(5), [ + .addService('/myService', new Service(5), [ 'add', 'delay', 'syncError', 'asyncError', 'httpError', 'addWithContext', - ]), + ]) + .router(), ) return app } diff --git a/packages/jsonrpc/src/express.ts b/packages/jsonrpc/src/express.ts index 9b49935..6c990ca 100644 --- a/packages/jsonrpc/src/express.ts +++ b/packages/jsonrpc/src/express.ts @@ -43,19 +43,20 @@ export function jsonrpc( res.json(errorResponse) } - return { + const router = Router() + + const self = { /** * Adds middleware for handling JSON RPC requests. Expects JSON middleware to * already be configured. */ addService>( + path: string, service: T, methods: F[], ) { const rpcService = createRpcService(service, methods) - const router = Router() - function handleResponse( response: ISuccessResponse | null, res: Response, @@ -68,7 +69,7 @@ export function jsonrpc( } } - router.get('/', (req, res, next) => { + router.get(path, (req, res, next) => { if (!idempotentMethodRegex.test(req.query.method)) { // TODO fix status code and error type const err = createError(ERROR_METHOD_NOT_FOUND, { @@ -89,18 +90,21 @@ export function jsonrpc( .catch(next) }) - router.post('/', (req, res, next) => { + router.post(path, (req, res, next) => { rpcService.invoke(req.body, getContext(req)) .then(response => handleResponse(response, res)) .catch(next) }) - router.use('/', handleError) - + router.use(path, handleError) + return self + }, + router() { return router }, } + return self } function getRequestId(req: express.Request) { diff --git a/packages/jsonrpc/src/redux.test.ts b/packages/jsonrpc/src/redux.test.ts index f3b4ace..ba33e89 100644 --- a/packages/jsonrpc/src/redux.test.ts +++ b/packages/jsonrpc/src/redux.test.ts @@ -55,11 +55,12 @@ describe('createActions', () => { const app = express() app.use(bodyParser.json()) - app.use('/service', jsonrpc(() => ({userId: 1000}), noopLogger) - .addService( - new Service(), - keys(), - )) + app.use( + '/', + jsonrpc(() => ({userId: 1000}), noopLogger) + .addService('/service', new Service(), keys()) + .router(), + ) let baseUrl: string let server: Server diff --git a/packages/jsonrpc/src/remote.test.ts b/packages/jsonrpc/src/remote.test.ts index acf7f1b..e06d858 100644 --- a/packages/jsonrpc/src/remote.test.ts +++ b/packages/jsonrpc/src/remote.test.ts @@ -35,8 +35,12 @@ describe('remote', () => { function createApp() { const a = express() a.use(bodyParser.json()) - a.use('/myService', jsonrpc(() => ({}), noopLogger) - .addService(service, IServiceKeys)) + a.use( + '/', + jsonrpc(() => ({}), noopLogger) + .addService('/myService', service, IServiceKeys) + .router(), + ) return a }