1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| async init() { const controllers = Reflect.getMetadata('controllers', this.module) || [] Logger.log(`AppModule dependencies initialized`, 'InstanceLoader') for (const Controller of controllers) { const controller = new Controller() const prefix = Reflect.getMetadata('prefix', Controller) || '/' Logger.log(`${Controller.name} {${prefix}}`, 'RoutesResolver') const controllerPrototype = Reflect.getPrototypeOf(controller) for (const methodName of Object.getOwnPropertyNames(controllerPrototype)){ const method = controllerPrototype[methodName] const httpMethod = Reflect.getMetadata('method', method) const httpPath = Reflect.getMetadata('path', method) ~~~~~~~~~~~~~~~~~~~~~~~~~ const redirectUrl = Reflect.getMetadata('redirectUrl', method) const redirectStatusCode = Reflect.getMetadata('redirectStatusCode', method) const httpCode = Reflect.getMetadata('httpCode', method) const responseHeaders = Reflect.getMetadata('responseHeaders', method) || [] if (!httpMethod) continue; const routePath = path.posix.join('/', prefix, httpPath) this.app[httpMethod.toLowerCase()](routePath, (req: Request, res: Response, next: NextFunction) => { const args = this.resolveParams(controller, methodName, req, res, next) const result = method.call(controller, ...args) if (redirectUrl) { res.redirect(result?.statusCode ?? (redirectStatusCode || 302), result?.url ?? redirectUrl) } if (httpCode) { res.statusCode = httpCode } else if (httpMethod === 'POST') { res.statusCode = 201 } if (responseHeaders.length) { responseHeaders.forEach(({name, value}) => { res.setHeader(name, value) }) } ~~~~~~~~~~~~~~~~~~~~~~~~~ const autoResponse = this.ifAutoResponse(controller, methodName) if (autoResponse) { res.send(result) } }) Logger.log(`Mapped {${routePath}, ${httpMethod}} route`, 'RoutesResolver') } } Logger.log('Nest application successfully started', 'NestApplication') }
|