Skip to content
This repository has been archived by the owner on Oct 23, 2023. It is now read-only.

Fix middleware backwards compatibility #246

Merged
merged 3 commits into from
Dec 14, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions lib/middleware/connect.js
Original file line number Diff line number Diff line change
@@ -1,24 +1,33 @@
'use strict';

var Raven = require('../client');
var utils = require('../utils');

// Legacy support
var connectMiddleware = function (client) {
return connectMiddleware.errorHandler(client);
};

var getClient = function (clientOrDSN) {
// Raven is an instance, so use Raven.constructor for instanceof check
return clientOrDSN instanceof Raven.constructor ? clientOrDSN : new Raven.Client(clientOrDSN);
};

// Error handler. This should be the last item listed in middleware, but
// before any other error handlers.
connectMiddleware.errorHandler = function (client) {
client = client instanceof Raven.Client ? client : new Raven.Client(client);
return client.errorHandler();
connectMiddleware.errorHandler = function (clientOrDSN) {
utils.consoleAlert('top-level Raven.middleware.*.errorHandler has been deprecated and will be removed in v2.0; use Raven.errorHandler() instance method instead');
return getClient(clientOrDSN).errorHandler();
};

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

// for testing purposes only; not gonna worry about a nicer test exposure scheme since this code is going away soon
connectMiddleware.getClient = getClient;

module.exports = connectMiddleware;
15 changes: 15 additions & 0 deletions test/raven.client.js
Original file line number Diff line number Diff line change
Expand Up @@ -1004,3 +1004,18 @@ describe('raven.Client', function () {
});
});
});

describe('raven.middleware', function () {
it('should use an instance passed to it instead of making a new one', function () {
var client = new raven.Client(dsn);
raven.middleware.express.getClient(client).should.equal(client);
});

it('should make a new instance when passed a DSN string', function () {
var client1 = new raven.Client(dsn);
var client2 = raven.middleware.express.getClient(dsn);
client2.should.not.equal(raven);
client2.should.not.equal(client1);
client2.should.be.an.instanceof(raven.constructor);
});
});