How to send a custom http status message in node / express?

My node.js app is modeled like the express/examples/mvc app.

In a controller action I want to spit out a HTTP 400 status with a custom http message. By default the http status message is "Bad Request":

HTTP/1.1 400 Bad Request

But I want to send

HTTP/1.1 400 Current password does not match

I tried various ways but none of them set the http status message to my custom message.

My current solution controller function looks like that:

exports.check = function( req, res) {
  if( req.param( 'val')!=='testme') {
    res.writeHead( 400, 'Current password does not match', {'content-type' : 'text/plain'});
    res.end( 'Current value does not match');

    return;
  } 
  // ...
}

Everything works fine but ... it seems not the the right way to do it.

Is there any better way to set the http status message using express ?

You can check this res.send(400, 'Current password does not match') Look express 3.x docs for details

UPDATE for Expressjs 4.x

Use this way (look express 4.x docs):

res.status(400).send('Current password does not match');
// or
res.status(400);
res.send('Current password does not match');

One elegant way to handle custom errors like this in express is:

function errorHandler(err, req, res, next) {
  var code = err.code;
  var message = err.message;
  res.writeHead(code, message, {'content-type' : 'text/plain'});
  res.end(message);
}

(you can also use express' built-in express.errorHandler for this)

Then in your middleware, before your routes:

app.use(errorHandler);

Then where you want to create the error 'Current password does not match':

function checkPassword(req, res, next) {
  // check password, fails:
  var err = new Error('Current password does not match');
  err.code = 400;
  // forward control on to the next registered error handler:
  return next(err);
}

If your goal is just to reduce it to a single/simple line, you could rely on defaults a bit...

return res.end(res.writeHead(400, 'Current password does not match'));