Skip to content

Commit 2e8dbc2

Browse files
committed
Allow request headers to be set in StackTrace.report()
This adds a 4th Object parameter for request options to StackTrace.report(). Specifying headers: {} allows one to customize request headers. Issue: #168
1 parent 19bb0cc commit 2e8dbc2

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

spec/stacktrace-spec.js

+17-2
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,6 @@ describe('StackTrace', function() {
216216

217217
function callback() {
218218
expect(postRequest.data()).toEqual({message: errorMsg, stack: stackframes});
219-
expect(postRequest.method).toBe('post');
220-
expect(postRequest.url).toBe(url);
221219
done();
222220
}
223221
});
@@ -246,5 +244,22 @@ describe('StackTrace', function() {
246244
jasmine.Ajax.stubRequest(url).andError();
247245
StackTrace.report(stackframes, url).then(done.fail, done)['catch'](done);
248246
});
247+
248+
it('allows specification of request headers', function(done) {
249+
var url = 'http://domain.ext/endpoint';
250+
var stackframes = [new StackFrame({functionName: 'fn', fileName: 'file.js', lineNumber: 32, columnNumber: 1})];
251+
var requestOptions = {headers: {'Access-Control-Request-Method': 'POST'}};
252+
253+
StackTrace.report(stackframes, url, null, requestOptions).then(callback, done.fail)['catch'](done.fail);
254+
255+
var postRequest = jasmine.Ajax.requests.mostRecent();
256+
postRequest.respondWith({status: 201, contentType: 'text/plain', responseText: 'OK'});
257+
258+
function callback() {
259+
expect(postRequest.data()).toEqual({stack: stackframes});
260+
expect(postRequest.requestHeaders).toEqual({'Access-Control-Request-Method': 'POST', 'Content-Type': 'application/json'});
261+
done();
262+
}
263+
});
249264
});
250265
});

stacktrace.js

+13-2
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,9 @@
187187
* @param {Array} stackframes
188188
* @param {String} url
189189
* @param {String} errorMsg
190+
* @param {Object} requestOptions
190191
*/
191-
report: function StackTrace$$report(stackframes, url, errorMsg) {
192+
report: function StackTrace$$report(stackframes, url, errorMsg, requestOptions) {
192193
return new Promise(function(resolve, reject) {
193194
var req = new XMLHttpRequest();
194195
req.onerror = reject;
@@ -202,10 +203,20 @@
202203
}
203204
};
204205
req.open('post', url);
206+
207+
// Set request headers
205208
req.setRequestHeader('Content-Type', 'application/json');
209+
if (requestOptions && typeof requestOptions.headers === 'object') {
210+
var headers = requestOptions.headers;
211+
for (var header in headers) {
212+
if (headers.hasOwnProperty(header)) {
213+
req.setRequestHeader(header, headers[header]);
214+
}
215+
}
216+
}
206217

207218
var reportPayload = {stack: stackframes};
208-
if (errorMsg !== undefined) {
219+
if (errorMsg !== undefined && errorMsg !== null) {
209220
reportPayload.message = errorMsg;
210221
}
211222

0 commit comments

Comments
 (0)