Express js 4 как обслуживать результаты json без предоставления каких-либо просмотров/css

Я использую express 4 для создания службы json API. Я не могу описать его, чтобы отправить простой json, не пытаясь отобразить представление.

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

когда я получаю доступ к маршруту

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

Я попытался удалить движок просмотра вместе

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

но он кричит этой ошибкой

No default engine was specified and no extension was provided

Ответы

Ответ 1

Если вы делаете какие-либо вызовы res.render, например, в обработчике ошибок, которые генерируются выражением "express generate", вы увидите описанную вами ошибку. Для службы json API вам, вероятно, не нужно ничего выводить, поэтому просто не вызывайте render(), а вызывайте res.send() со статусом res.status, установленным на 404 или 500.

В основном, замените это:

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

с этим:

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

Ответ 2

в конечном итоге это был кубический общий признак 404, который сделал все маршруты недоступными.

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

удалив его, он решил его.