Skip to content

Commit 86594a4

Browse files
committed
add JsonP logging support + change to opts obj init
1 parent 974cd51 commit 86594a4

5 files changed

Lines changed: 52 additions & 24 deletions

File tree

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
node_modules
1+
node_modules
2+
*.sublime*
3+
npm-debug.log

lib/error-response.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@
55
var _ = require('underscore');
66

77
var errResponse = function (err, res) {
8-
// if passed response object then return the appropriate response
8+
9+
var payload = {error: err && err.name || "Error"},
10+
errResCode = err && err.resCode || 500,
11+
resCode = (this.jsonP === true) ? 200 : err && err.resCode || 500;
12+
913
if (err && res && _.isFunction(res.send)) {
10-
res.send(err && err.resCode || 500, {
11-
error: err && err.name || "Error"
12-
});
14+
(this.jsonP === true) && (payload.resCode = errResCode);
15+
res.send(resCode, payload);
1316
}
1417
};
1518

lib/main.js

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
1-
/*jslint nomen: true, plusplus: false, sloppy: true, white:true*/
2-
/*jshint nomen: false, curly: true, plusplus: false, expr:true, undef:true, newcap:true, latedef:true, camelcase:true */
3-
/*global module: false, iScroll:false, setTimeout: false, document:false, WebKitCSSMatrix:false, _: false, Backbone: false, backbone: false, $: false, define: false, require: false, console: false, window:false */
4-
51
var productionLogging = require('./production'),
62
devLogging = require('./development'),
73
printError = require('./print-error'),
84
errResponse = require('./error-response'),
95
_ = require('underscore');
106

11-
var LogClass = function (env, app) {
12-
this.env = env;
13-
this.app = app;
7+
// var LogClass = function (env, app) {
8+
var LogClass = function (opts) {
9+
this.env = opts.env;
10+
this.app = opts.app;
11+
this.jsonP = opts.jsonP;
1412
_(this).bindAll('errResponse', 'printError', 'productionLogging', 'devLogging', 'log');
1513
};
1614

@@ -42,12 +40,13 @@ LogClass.prototype.log = function (err, req, res, next) {
4240
_.isFunction(next) && next();
4341
}
4442

45-
// always return the error
4643
return err;
4744
};
4845

4946
module.exports = {
5047
LogClass: LogClass,
51-
production: (new LogClass('production')).log,
52-
development: (new LogClass('development')).log
48+
production: (new LogClass({env: 'production'})).log,
49+
development: (new LogClass({env: 'development'})).log,
50+
productionJsonP: (new LogClass({env: 'production', jsonP: true})).log,
51+
developmentJsonP: (new LogClass({env: 'development', jsonP: true})).log
5352
};

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "log-errors",
3-
"version": "3.4.2",
3+
"version": "4.0.0",
44
"license": "BSD",
55
"description": "environment aware error logger that can easily be plugged into express.js",
66
"tags": [

test/main.test.js

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
/*jslint nomen: true, plusplus: false, sloppy: true, white:true*/
2-
/*jshint nomen: false, curly: true, plusplus: false, expr:true, undef:true, newcap:true, latedef:true, camelcase:true */
3-
/*global module: false, iScroll:false, setTimeout: false, document:false, WebKitCSSMatrix:false, _: false, Backbone: false, backbone: false, $: false, define: false, require: false, console: false, window:false */
4-
51
var test = require('tap').test,
62
main = require('./../lib/main'),
73
LogClass = main.LogClass,
84
prodLogger = main.production,
5+
prodLoggerJsonP = main.productionJsonP,
96
devLogger = main.development;
107

118

@@ -46,9 +43,36 @@ test('next shd be called if it is a function and there is no error', function(t)
4643

4744
test('constructor sets class attrs', function(t) {
4845
var app = {something: "else"};
49-
t.equal((new LogClass('production')).env, 'production', 'prod logger environment set correctly');
50-
t.equal((new LogClass('development')).env, 'development', 'dev logger environment set correctly');
51-
t.equal((new LogClass('development', app)).app, app, 'app attr set correctly in dev');
52-
t.equal((new LogClass('production', app)).app, app, 'app attr set correctly in prod');
46+
t.equal((new LogClass({"env": 'production'})).env, 'production', 'prod logger environment set correctly');
47+
t.equal((new LogClass({"env": 'development'})).env, 'development', 'dev logger environment set correctly');
48+
t.equal((new LogClass({"env": 'development', "app": app})).app, app, 'app attr set correctly in dev');
49+
t.equal((new LogClass({"env": 'production', "app": app})).app, app, 'app attr set correctly in prod');
5350
t.end();
5451
});
52+
53+
54+
55+
/*--------------------------------------
56+
jsonP tests
57+
---------------------------------------*/
58+
test('handle jsonP', function(t) {
59+
60+
var errInput = {
61+
resCode: 402,
62+
name: 'weirdError'
63+
},
64+
payloadExpected = {
65+
resCode: errInput.resCode,
66+
error: errInput.name
67+
},
68+
responseObj = {
69+
send: function (resCode, payload) {
70+
t.deepEqual(payload, payloadExpected, 'error object returned');
71+
t.equal(resCode, 200, 'returns 200 response code');
72+
t.end();
73+
}
74+
};
75+
76+
prodLoggerJsonP(errInput, {}, responseObj);
77+
78+
});

0 commit comments

Comments
 (0)