When sending scripts from my Node.js server to the browser, in Google Chrome, I get this warning:
Resource interpreted as Script but transferred with MIME type text/plain
I Google'd around, and found out that it's a server-side problem, namely, I think that I should set the correct MIME type to things, before sending them. Here's the HTTP server's handler:
var handler = function(req, res)
{
url = convertURL(req.url); //I implemented "virtual directories", ignore this.
if (okURL(url)) //If it isn't forbidden (e.g. forbidden/passwd.txt)
{
fs.readFile (url, function(err, data)
{
if (err)
{
res.writeHead(404);
return res.end("File not found.");
}
//I think that I need something here.
res.writeHead(200);
res.end(data);
});
}
else //The user is requesting an out-of-bounds file.
{
res.writeHead(403);
return res.end("Forbidden.");
}
}
Question: How do I correct my server-side code to configure the MIME type correctly?
(Note: I already found https://github.com/broofa/node-mime, but it only lets me determine the MIME type, not to "set" it.)
I had problems using your handler function because convertURL and okURL functions where not defined. I modified the code a little and finished looking like this
mime.lookup()
is now renamed tomime.getType()
. So you can do like this:https://www.npmjs.com/package/mime
Search google for the Content-Type HTTP header.
Then figure out how to set it with http://expressjs.com/api.html#res.set
Oops, the example includes your answer ;)
Simply check the file ending, if it's
.js
, set the appropriate MIME type to make browsers happy.EDIT: In case this is pure node, without express, look here: http://nodejs.org/api/http.html#http_response_setheader_name_value
I figured it out!
Thanks to @rdrey's link and this node module I managed to correctly set the MIME type of the response, like this: