express js 4 how to serve json results without rendering any views /css

express, node.js, routes

Solution

If you're making any calls to `res.render` such as in an error handler that are generated by the 'express generate', then you'll see the error you described. For a json API service you probably don't need to render anything so just don't call `render()`, instead call `res.send()` with the status res.status set to 404 or 500.

So basically, replace this:

app.use(function(err, req, res, next) {
    res.render('error', {
        message: err.message,
        error: err
    });
});

with this:

app.use(function(err, req, res, next){
    res.status(err.status || 500);
    res.send({
        message: err.message,
        error: err
    });
   return;
});

Problem

I am using express 4 in order to create a json API service. I can't seem to define it to send a simple json without trying to render the view. ``` var express = require('express'); var router = express.Router(); module.exports = function (app, namespace) { router.get('/', function(req, res) { res.json({'body': 123}); }); app.use(namespace + '/v1', router); }; ``` when I access the route it's ``` Error: Failed to lookup view "error" in views directory "/Volumes/api_service/init/views" ``` I tried to remove the views engine all together ``` //app.set('views', path.join(__dirname, 'views')); //app.set('view engine', 'jade'); ``` but it yells with this error ``` No default engine was specified and no extension was provided ```

Original source