Express: Setting content-type based on path/file? Express: Setting content-type based on path/file? javascript javascript

Express: Setting content-type based on path/file?


Also, if you want to extend the mime-types that express(connect) knows about, you can do

express.static.mime.define({'text/plain': ['md']});

or

connect.static.mime.define({'text/plain': ['md']});

PS: the mime module is now located at https://github.com/broofa/node-mime


The Express documentation shows that it can do this if you pass in the file name.

var filePath = 'path/to/image.png';res.contentType(path.basename(filePath));// Content-Type is now "image/png"

[Edit]

Here's an example which serves files from a relative directory called static and automatically sets the content type based on the file served:

var express = require('express');var fs      = require('fs');var app = express.createServer();app.get('/files/:file', function(req, res) {  // Note: should use a stream here, instead of fs.readFile  fs.readFile('./static/' + req.params.file, function(err, data) {    if(err) {      res.send("Oops! Couldn't find that file.");    } else {      // set the content type based on the file      res.contentType(req.params.file);      res.send(data);    }       res.end();  }); });app.listen(3000);


Connect will automatically set the content type, unless you explicitly set it yourself. Here's the snippet that does it. It uses mime.lookup and mime.charsets.lookup

// mime typetype = mime.lookup(path);//<SNIP>....// header fieldsif (!res.getHeader('content-type')) {  var charset = mime.charsets.lookup(type);  res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : ''));}

If this isn't working for you, post your code as your custom code is likely interfering with the default behavior somehow.