UNPKG

@nestjs/core

Version:

Nest - modern, fast, powerful node.js web framework (@core)

53 lines (52 loc) 2.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const router_proxy_1 = require("./router-proxy"); const logger_service_1 = require("@nestjs/common/services/logger.service"); const messages_1 = require("../helpers/messages"); const router_exception_filters_1 = require("./router-exception-filters"); const metadata_scanner_1 = require("../metadata-scanner"); const router_explorer_1 = require("./router-explorer"); const common_1 = require("@nestjs/common"); class RoutesResolver { constructor(container, expressAdapter, config) { this.container = container; this.expressAdapter = expressAdapter; this.config = config; this.logger = new logger_service_1.Logger(RoutesResolver.name, true); this.routerProxy = new router_proxy_1.RouterProxy(); this.routerExceptionsFilter = new router_exception_filters_1.RouterExceptionFilters(config); this.routerBuilder = new router_explorer_1.ExpressRouterExplorer(new metadata_scanner_1.MetadataScanner(), this.routerProxy, expressAdapter, this.routerExceptionsFilter, config, this.container); } resolve(express) { const modules = this.container.getModules(); modules.forEach(({ routes }, moduleName) => this.setupRouters(routes, moduleName, express)); this.setupNotFoundHandler(express); this.setupExceptionHandler(express); } setupRouters(routes, moduleName, express) { routes.forEach(({ instance, metatype }) => { const path = this.routerBuilder.fetchRouterPath(metatype); const controllerName = metatype.name; this.logger.log(messages_1.ControllerMappingMessage(controllerName, path)); const router = this.routerBuilder.explore(instance, metatype, moduleName); express.use(path, router); }); } setupNotFoundHandler(express) { const callback = (req, res) => { throw new common_1.NotFoundException(`Cannot ${req.method} ${req.url}`); }; const exceptionHandler = this.routerExceptionsFilter.create({}, callback); const proxy = this.routerProxy.createProxy(callback, exceptionHandler); express.use(proxy); } setupExceptionHandler(express) { const callback = (err, req, res, next) => { throw err; }; const exceptionHandler = this.routerExceptionsFilter.create({}, callback); const proxy = this.routerProxy.createExceptionLayerProxy(callback, exceptionHandler); express.use(proxy); } } exports.RoutesResolver = RoutesResolver;