2014-04-25 4 views
15

Ich benutze Express 4, um eine JSON-API-Dienst zu erstellen. Ich kann es anscheinend nicht definieren, um ein einfaches json zu senden, ohne zu versuchen, die Ansicht zu rendern.express js 4 wie json Ergebnisse zu bedienen, ohne irgendwelche Ansichten/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); 
}; 

, wenn ich die Strecke zugreifen, es ist

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

Ich versuchte, den Blick Motor

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

alle zusammen zu entfernen, aber es schreit mit diesem Fehler

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

Haben Sie versucht, eine Fehleransicht hinzuzufügen und zu sehen, was der Fehler ist oder so ähnlich? – bredikhin

+0

Ich schrieb, dass der Fehler. Es ist "Fehler: Fehler beim Lookup-View" -Fehler "im views-Verzeichnis"/Volumes/api_service/init/views "' – WebQube

Antwort

32

Wenn Du machst Anrufe an res.render wie in einem Fehlerhandler, der von 'express generate' generiert wird, dann sehen Sie den Fehler, den Sie beschrieben haben. Für einen json API Service, den Sie wahrscheinlich nicht brauchen, etwas zu machen, so nicht einfach render() nennen, rufen Sie stattdessen res.send() mit dem Status res.status auf 404 oder 500.

Also im Grunde ersetzt diese:

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

mit diesem:

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

schließlich waren es die ausdrücklichen generic Haken 404 ist, die alle Routen unvailables gemacht.

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

entfernen ihn löste es.

+0

Entfernen next() - Funktion hat den Trick für mich – jeyanthinath