Kraken JS промежуточное ПО и исключения

Я экспериментирую с KrakenJS, пытаюсь создать базовый API для понимания вещей.

Одна вещь, в которой я не уверен, это промежуточное ПО, в частности, обработка ошибок 404/500.

"fileNotFound": {
    "enabled": true,
    "priority": 130,
    "module": {
            "name":"path:./lib/exceptions/404"
    }
}

Это ловит любые 404 ошибки, и затем я сам справляюсь с этим в моей собственной конфигурации. Однако почему это fileNotFound бросили? Где serverError выброшено за 500 ошибок?

Я хотел бы определить свои собственные файлы для других исключений, таких как 403, однако как я могу получить это для запуска промежуточного программного обеспечения?

1 ответ

Как упомянул @HeadCode, обязательно прочитайте на meddleware, чтобы понять, как промежуточное ПО загружается немного лучше.

Тем не менее, мы должны пересмотреть несколько вещей, чтобы прояснить происходящее.


Погрузка 404

Во-первых, давайте рассмотрим, как обычно регистрировать обработчик 404 в простом старом экспресс-приложении.

Как правило, в цепочке продолжения промежуточного программного обеспечения будет конечное промежуточное ПО, просто предположите, что, если бы мы сделали это так долго, не выполняя поручение, мы просто не смогли бы найти ресурс. Вот пример:

var express = require('express');
var app = express();

app.get('/firstRoute', function handler(req, res) { res.send('found me'); });
app.get('/secondRoute', function handler(req, res) { res.send('found me');  });

app.use(function notFoundHandler(req, res, next) {
    res.status(404).send('Route Not Found');
});

app.listen(8000, function onListen() { console.log('listening on 8000...'); });

Поскольку маршруты разрешаются в порядке их добавления в Express 4, пока ваш обработчик 404 последний, вы можете быть уверены, что ни один другой маршрут не соответствует.

Этот шаблон кратко описан в Экспресс-ответах.


Обработка 500 с

Теперь перейдем к 500-м годам.

В Express есть концепция промежуточного программного обеспечения для обработки ошибок (также описанного на сайте Express). Промежуточное программное обеспечение для обработки ошибок требует арности 4 (т.е. принимает четыре аргумента), и это единственное отличие. Они выполняются только в том случае, если сообщается об ошибке, которая выполняется путем передачи объекта в ваш next вызов. Проще объяснить в коде:

var express = require('express');
var app = express();

app.get('/firstRoute', function handler(req, res) { res.send('found me'); });
app.get('/secondRoute', function handler(req, res) { throw new Error('oops'); });

app.use(function notFoundHandler(req, res, next) {
    res.status(404).send('Route Not Found');
});

app.use(function errorHandler(err, req, res, next) {
    res.status(500).send('Broken. :(');
});

app.listen(8000, function onListen() { console.log('listening on 8000...'); });

В приведенном выше примере errorHandler будет выполняться, только если 1) другое промежуточное ПО или обработчик маршрута выдает ошибку или 2) мы вызываем next с аргументом *, .eg next(new Error('oops')),

Давай, беги. если вы посетите /notFound или любой случайный маршрут, вы правильно получите 404. Если вы посетите /firstRoute ты получишь found meи если вы идете в secondRoute ты получишь Broken. :(,


Что насчет кракена?

Kraken - или, точнее, meddleware - просто перемещает определение вашего промежуточного ПО в вашу конфигурацию. Этот небольшой блок json, который вы скопировали выше, в основном функционально эквивалентен следующему в ванильном экспресс-приложении:

var fileNotFound = require('./lib/exceptions/404');

// ... app.use() everything with a priority lower than 130 ...
app.use(fileNotFound());
// ... app.use() everything with a priority *greater* than 130 ...
Другие вопросы по тегам