format method

Future<void> format(
  1. Map<String, Function> formats
)

Content negotiation helper.

Example:

res.format({
  'json': () => res.json(data),
  'html': () => res.view('index', data),
});

Implementation

Future<void> format(Map<String, Function> formats) async {
  final accept = _raw.headers.value(HttpHeaders.acceptHeader) ?? '';

  if (accept.contains('application/json') && formats.containsKey('json')) {
    await formats['json']!();
  } else if (accept.contains('text/html') && formats.containsKey('html')) {
    await formats['html']!();
  } else {
    // Default to first format or json
    if (formats.isNotEmpty) {
      await formats.values.first();
    } else {
      status(406).send('Not Acceptable');
    }
  }
}