Skip to content

Commit bbfa0c0

Browse files
authored
Middleware fixes (#223)
* Disable client instantiation in errorHandler * Use captureException the new way * Move middleware to live on Raven prototype
1 parent 29a8471 commit bbfa0c0

File tree

2 files changed

+32
-23
lines changed

2 files changed

+32
-23
lines changed

lib/client.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,32 @@ extend(Raven.prototype, {
359359
*/
360360
setShouldSendCallback: function (callback) {
361361
return this.setCallbackHelper('shouldSendCallback', callback);
362+
},
363+
364+
requestHandler: function () {
365+
var self = this;
366+
return function (req, res, next) {
367+
self.context({}, next, next);
368+
};
369+
},
370+
371+
errorHandler: function () {
372+
var self = this;
373+
return function (err, req, res, next) {
374+
var status = err.status || err.statusCode || err.status_code || 500;
375+
376+
// skip anything not marked as an internal server error
377+
if (status < 500) return next(err);
378+
379+
var kwargs = parsers.parseRequest(req);
380+
if (domain.active && domain.active.sentryContext) {
381+
kwargs = extend(kwargs, domain.active.sentryContext);
382+
}
383+
return self.captureException(err, kwargs, function (sendErr, eventId) {
384+
res.sentry = eventId;
385+
next(err);
386+
});
387+
};
362388
}
363389
});
364390

@@ -383,6 +409,7 @@ Raven.prototype.get_ident = Raven.prototype.getIdent;
383409

384410
// Maintain old API compat, need to make sure arguments length is preserved
385411
function Client(dsn, options) {
412+
if (dsn instanceof Client) return dsn;
386413
var ravenInstance = new Raven();
387414
return ravenInstance.config.apply(ravenInstance, arguments);
388415
}

lib/middleware/connect.js

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
'use strict';
22

3-
var raven = require('../client');
4-
var parsers = require('../parsers');
5-
var extend = require('../utils').extend;
6-
var domain = require('domain');
3+
var Raven = require('../client');
74

85
// Legacy support
96
var connectMiddleware = function (client) {
@@ -13,30 +10,15 @@ var connectMiddleware = function (client) {
1310
// Error handler. This should be the last item listed in middleware, but
1411
// before any other error handlers.
1512
connectMiddleware.errorHandler = function (client) {
16-
client = client instanceof raven.Client ? client : new raven.Client(client);
17-
return function (err, req, res, next) {
18-
var status = err.status || err.statusCode || err.status_code || 500;
19-
20-
// skip anything not marked as an internal server error
21-
if (status < 500) return next(err);
22-
23-
var kwargs = parsers.parseRequest(req);
24-
if (domain.active && domain.active.sentryContext) {
25-
kwargs = extend(kwargs, domain.active.sentryContext);
26-
}
27-
return client.captureException(err, kwargs, function (result) {
28-
res.sentry = client.getIdent(result);
29-
next(err, req, res);
30-
});
31-
};
13+
client = client instanceof Raven.Client ? client : new Raven.Client(client);
14+
return client.errorHandler();
3215
};
3316

3417
// Ensures asynchronous exceptions are routed to the errorHandler. This
3518
// should be the **first** item listed in middleware.
3619
connectMiddleware.requestHandler = function (client) {
37-
return function (req, res, next) {
38-
client.context({}, next, next);
39-
};
20+
client = client instanceof Raven.Client ? client : new Raven.Client(client);
21+
return client.requestHandler();
4022
};
4123

4224
module.exports = connectMiddleware;

0 commit comments

Comments
 (0)