Skip to content

Commit

Permalink
breaking: omit node domains from serializer (#95)
Browse files Browse the repository at this point in the history
  • Loading branch information
cprussin authored and misterdjules committed Mar 4, 2019
1 parent c4cf6c3 commit 06ed8ae
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lib/serializer.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
var assert = require('assert-plus');
var _ = require('lodash');
var verror = require('verror');
var domain = require('domain');
var safeJsonStringify;

// try to require optional dependency
Expand Down Expand Up @@ -154,6 +155,10 @@ function _getSerializedContext(err) {
_.omit(err, self._knownFields) :
{};

if (topLevelFields.domain instanceof domain.Domain) {
topLevelFields = _.omit(topLevelFields, [ 'domain' ]);
}

// combine all fields into a pojo, and serialize
var allFields = _.assign({}, topLevelFields, err.context, verror.info(err));

Expand Down
41 changes: 41 additions & 0 deletions test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

// core modules
var http = require('http');
var domain = require('domain');

// userland
var assert = require('chai').assert;
Expand Down Expand Up @@ -983,5 +984,45 @@ describe('restify-errors node module.', function() {
var serializedErr = serializer.err(err1, 'oh noes!');
assert.notInclude(serializedErr.stack, 'cause=undefined');
});

it('should serialize domain when not using node domains', function() {
var serializer = restifyErrors.bunyanSerializer.create({
topLevelFields: true
});
var err1 = new Error('foo');
err1.domain = 'bar';

logger.child({ serializers: serializer }).error(err1);

var serializedErr = serializer.err(err1, 'oh noes!');
assert.include(serializedErr.stack, 'domain="bar"');
});

// eslint-disable-next-line max-len
it('should not serialize domain when using node domains', function(done) {
var dom = domain.create();
dom.on('error', function(err1) {
var serializer = restifyErrors.bunyanSerializer.create({
topLevelFields: true
});

logger.child({ serializers: serializer }).error(err1);

var serializedErr = serializer.err(err1, 'oh noes!');
// This weird pattern is necessary to make mocha report failures
// correctly inside a domain context
try {
assert.notInclude(serializedErr.stack, 'domain=');
return done();
} catch (e) {
return done(e);
}
});
dom.run(function() {
process.nextTick(function() {
throw new Error('foo');
});
});
});
});
});

0 comments on commit 06ed8ae

Please sign in to comment.