expresa js 4 cómo servir los resultados json sin mostrar ninguna vista / css

Estoy usando Express 4 para crear un servicio de API json. Parece que no puedo definirlo para enviar un json simple sin intentar renderizar la vista.

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); }; 

cuando accedo a la ruta es

 Error: Failed to lookup view "error" in views directory "/Volumes/api_service/init/views" 

Traté de eliminar el motor de vistas todos juntos

 //app.set('views', path.join(__dirname, 'views')); //app.set('view engine', 'jade'); 

Pero grita con este error.

 No default engine was specified and no extension was provided 

Si está realizando alguna llamada a res.render , como en un controlador de errores generado por el ‘generar expreso’, verá el error que describió. Para un servicio de API json probablemente no necesite renderizar nada, así que simplemente no llame a render() , en su lugar llame a res.send() con el estado res.status establecido en 404 o 500

Así que básicamente, reemplaza esto:

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

con este:

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

finalmente, fue la captura genérica expresa 404 la que hizo que todas las rutas estuvieran disponibles.

 app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); 

Eliminándolo lo solucionó.