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);
});
удалив его, он решил его.