Skip to content

Commit 195b8a9

Browse files
authored
Fix middleware backwards compatibility (#246)
* Fix middleware `client instanceof Raven.Client` check to use `Raven.constructor` (thanks @dhritzkiv) * Add deprecation warning to top-level middleware * Add tests for top-level Raven.middleware backwards compat
1 parent 55b0e2f commit 195b8a9

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

lib/middleware/connect.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,33 @@
11
'use strict';
22

33
var Raven = require('../client');
4+
var utils = require('../utils');
45

56
// Legacy support
67
var connectMiddleware = function (client) {
78
return connectMiddleware.errorHandler(client);
89
};
910

11+
var getClient = function (clientOrDSN) {
12+
// Raven is an instance, so use Raven.constructor for instanceof check
13+
return clientOrDSN instanceof Raven.constructor ? clientOrDSN : new Raven.Client(clientOrDSN);
14+
};
15+
1016
// Error handler. This should be the last item listed in middleware, but
1117
// before any other error handlers.
12-
connectMiddleware.errorHandler = function (client) {
13-
client = client instanceof Raven.Client ? client : new Raven.Client(client);
14-
return client.errorHandler();
18+
connectMiddleware.errorHandler = function (clientOrDSN) {
19+
utils.consoleAlert('top-level Raven.middleware.*.errorHandler has been deprecated and will be removed in v2.0; use Raven.errorHandler() instance method instead');
20+
return getClient(clientOrDSN).errorHandler();
1521
};
1622

1723
// Ensures asynchronous exceptions are routed to the errorHandler. This
1824
// should be the **first** item listed in middleware.
19-
connectMiddleware.requestHandler = function (client) {
20-
client = client instanceof Raven.Client ? client : new Raven.Client(client);
21-
return client.requestHandler();
25+
connectMiddleware.requestHandler = function (clientOrDSN) {
26+
utils.consoleAlert('top-level Raven.middleware.*.requestHandler has been deprecated and will be removed in v2.0; use Raven.requestHandler() instance method instead');
27+
return getClient(clientOrDSN).requestHandler();
2228
};
2329

30+
// for testing purposes only; not gonna worry about a nicer test exposure scheme since this code is going away soon
31+
connectMiddleware.getClient = getClient;
32+
2433
module.exports = connectMiddleware;

test/raven.client.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,3 +1004,18 @@ describe('raven.Client', function () {
10041004
});
10051005
});
10061006
});
1007+
1008+
describe('raven.middleware', function () {
1009+
it('should use an instance passed to it instead of making a new one', function () {
1010+
var client = new raven.Client(dsn);
1011+
raven.middleware.express.getClient(client).should.equal(client);
1012+
});
1013+
1014+
it('should make a new instance when passed a DSN string', function () {
1015+
var client1 = new raven.Client(dsn);
1016+
var client2 = raven.middleware.express.getClient(dsn);
1017+
client2.should.not.equal(raven);
1018+
client2.should.not.equal(client1);
1019+
client2.should.be.an.instanceof(raven.constructor);
1020+
});
1021+
});

0 commit comments

Comments
 (0)