toLowerCase of undefined
NoumanSaleem opened this issue · comments
Taking a look at our server logs and see this error pop up quite a bit:
00:41:48 web.1 | error: uncaughtException: Cannot call method 'toLowerCase' of undefined date=Wed Oct 15 2014 00:41:48 GMT+0000 (UTC), pid=1325, uid=0, gid=0, version=v0.10.32, rss=121901056, heapTotal=99441152, heapUsed=53938544, loadavg=[0.05419921875, 0.04833984375, 0.046875], uptime=13299.326321529, trace=[column=54, file=/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js, function=null, line=81, method=null, native=false, column=null, file=null, function=Array.every, line=null, method=every, native=true, column=14, file=/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js, function=specify, line=80, method=null, native=false, column=12, file=/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js, function=accepted.map.filter.sort.s, line=48, method=map.filter.sort.s, native=false, column=null, file=null, function=Array.map, line=null, method=map, native=true, column=20, file=/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js, function=getMediaTypePriority, line=47, method=null, native=false, column=21, file=/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js, function=provided.map.filter.sort.pa, line=101, method=map.filter.sort.pa, native=false, column=null, file=null, function=Array.map, line=null, method=map, native=true, column=21, file=/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js, function=preferredMediaTypes, line=100, method=null, native=false, column=12, file=/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/negotiator.js, function=Negotiator.(anonymous function), line=26, method=(anonymous function), native=false], stack=[TypeError: Cannot call method 'toLowerCase' of undefined, at /app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js:81:54, at Array.every (native), at specify (/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js:80:14), at accepted.map.filter.sort.s (/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js:48:12), at Array.map (native), at getMediaTypePriority (/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js:47:20), at provided.map.filter.sort.pa (/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js:101:21), at Array.map (native), at preferredMediaTypes (/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js:100:21), at Negotiator.(anonymous function) (/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/negotiator.js:26:12)]
Would you be able to post a standard-formatted stack trace or code to reproduce? Either of those two would help a lot :)
@dougwilson wish I had some more context around this. Unfortunately just have the error itself. I'll be doing some more digging into reproducing this. Hope the slightly better (maybe not) formatting helps :)
It happened in an express web application (express v4.8.7)
thanks!
trace=[
column=54,
file=/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js,
function=null,
line=81,
method=null,
native=false,
column=null,
file=null,
function=Array.every,
line=null,
method=every,
native=true,
column=14,
file=/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js,
function=specify,
line=80,
method=null,
native=false,
column=12,
file=/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js,
function=accepted.map.filter.sort.s,
line=48,
method=map.filter.sort.s,
native=false,
column=null,
file=null,
function=Array.map,
line=null,
method=map,
native=true,
column=20,
file=/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js,
function=getMediaTypePriority,
line=47,
method=null,
native=false,
column=21,
file=/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js,
function=provided.map.filter.sort.pa,
line=101,
method=map.filter.sort.pa,
native=false,
column=null,
file=null,
function=Array.map,
line=null,
method=map,
native=true,
column=21,
file=/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js,
function=preferredMediaTypes,
line=100,
method=null,
native=false,
column=12,
file=/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/negotiator.js,
function=Negotiator.(anonymousfunction),
line=26,
method=(anonymousfunction),
native=false
],
stack=[
TypeError: Cannotcallmethod'toLowerCase'ofundefined,
at/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js: 81: 54,
atArray.every(native),
atspecify(/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js: 80: 14),
ataccepted.map.filter.sort.s(/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js: 48: 12),
atArray.map(native),
atgetMediaTypePriority(/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js: 47: 20),
atprovided.map.filter.sort.pa(/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js: 101: 21),
atArray.map(native),
atpreferredMediaTypes(/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js: 100: 21),
atNegotiator.(anonymousfunction)(/app/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/negotiator.js: 26: 12)
]
I think this error is because you are adding an enumerable property on Object.prototype
, which will wreck havoc in all sorts of weird places. Would you be willing to show the output of the following within your application's code?
console.dir(Object.prototype)
Nevermind, I have determined the cause and it's from an invalid media type most likely. Example: text/html; foo
(foo
at the end is invalid because it needs to be a key value pair).
OK, so what I believe was causing your issue should be resolved now. I'll issue out a new version of this module and accepts
module and you should be able to npm update
your express install to pull it in.
@dougwilson really appreciate the quick response on this and your work on express!
You're welcome :) And let me know if you're still seeing this error pop up, even after updating accepts
to 1.1.2, since I fixed a error with the same stack trace you provided, but cannot be 100% sure it fixed your issue :)