2014-04-25 10 views
15

Używam ekspresowego 4 w celu utworzenia usługi json API. Nie mogę tego zdefiniować, aby wysłać prosty json bez próby renderowania widoku.express js 4 jak wyświetlać wyniki json bez renderowania żadnych widoków/css

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

kiedy dostęp do trasy to

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

Próbowałem wyjąć silnik ciami razem

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

ale krzyczy z tym błędem

No default engine was specified and no extension was provided 
+0

Czy próbowałeś dodać widok błędu i zobaczyć, jaki jest błąd lub coś w tym stylu? – bredikhin

+0

Napisałem, że błąd. To błąd "Błąd: nie udało się wyświetlić widoku" "w katalogu widoków"/Volumes/api_service/init/views "' – WebQube

Odpowiedz

32

Jeśli dzwonisz pod numer res.render, takie jak w obsłudze błędów, które są generowane przez "ekspresowe generowanie", wtedy zobaczysz błąd, który opisałeś. Za usługę API json prawdopodobnie nie trzeba uczynić wszystko, więc po prostu nie nazywają render(), zamiast zadzwonić res.send() z res.status stanu ustawionym na 404 lub 500.

więc w zasadzie wymienić to:

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

z tym:

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

ostatecznie to właśnie ekspresowych generyczne 404 połowowe, że wykonane wszystkie szlaki unvailables.

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

usunięcie go rozwiązało.

+0

usuwanie funkcji next() zrobiło to dla mnie – jeyanthinath