【问题标题】:Dependencies not being injected on NestJS with Serverless and AWS没有在带有无服务器和 AWS 的 NestJS 上注入依赖项
【发布时间】:2019-10-18 08:16:34
【问题描述】:

大家,

我正在尝试设置我的第一个 NestJS 应用程序。它由 AWS 上的无服务器支持。

我创建了一个简单的控制器,它有一个服务作为依赖项。当我使用 HTTP 客户端访问端点时,应该包含服务实例的对象是 undefined。我无法让它工作。你能帮忙吗?

handler.ts

import { Context, Handler } from 'aws-lambda';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './src/module';
import { Server } from 'http';
import { ExpressAdapter } from '@nestjs/platform-express';
import * as serverless from 'aws-serverless-express';
import * as express from 'express';
import {DB} from './src/libs/db';

let cachedServer: Server;

function bootstrapServer(): Promise<Server> {
  const expressApp = express();
  const adapter = new ExpressAdapter(expressApp);
  return NestFactory.create(AppModule, adapter)
    .then(app => app.enableCors())
    .then(app => app.init())
    .then(() => DB.connect())
    .then(() => serverless.createServer(expressApp));
}

export const handle: Handler = (event: any, context: Context) => {
  if (!cachedServer) {
    bootstrapServer().then(server => {
      cachedServer = server;
      return serverless.proxy(server, event, context);
    });
  } else {
    return serverless.proxy(cachedServer, event, context);
  }
};

module.ts

import { Module } from '@nestjs/common';
import { EventController } from './event.controller';
import { EventService } from './event.service';

@Module({
  controllers: [EventController],
  providers: [EventService],
})
export class AppModule {}

event.service.ts

import { Injectable } from '@nestjs/common';

interface Event{}

@Injectable()
export class EventService {
  create(event: Event) {
    return {
      id: Date.now()
    }
  }
}

event.controller.ts

import { Controller, Post, Body } from '@nestjs/common';
import { EventService } from './event.service';

interface Event { }

@Controller('event')
export class EventController {
  constructor(private readonly eventService: EventService) { }

  @Post()
  async create(@Body() req)

{
    this.eventService.create(req);
  }
}

所以this.eventService 总是undefined。这个实现有什么问题?

【问题讨论】:

  • 乍一看,我觉得一切正常,你的 tsconfig 呢?可以分享一下吗?
  • 你确定你真的需要 AWS Lambda 中的 Nest.js 吗?它增加了你的“冷启动”。您的用户/前端可能会不时地等待 10 秒以等待 Lambda 的响应。
  • 嗨 Victor 我正在尝试使用 AWS lambda 设置我的 nestjs 项目,我无法获得任何有关将 nestjs 与 AWS 集成的特定文档,您能否给我一些信息或您遵循的任何特定文档?谢谢

标签: serverless-framework nestjs aws-serverless


【解决方案1】:

也许您在 tsconfig 中缺少一行,请在下面添加:

"emitDecoratorMetadata": 真

感谢Nestjs之神卡米尔先生的回复: https://stackoverflow.com/a/50121886/6301493

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2021-03-07
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多