NestJS 中的 Azure 函数应用程序仅显示一个 http 触发函数

问题描述 投票:0回答:1

从我在 Azure 上的 NestJS 应用程序中,我只提供主要功能。我无法看到我的应用程序中的所有端点。所有端点均按预期可达。我需要将此功能应用程序连接到 API 管理。目前,API 管理仅看到一个端点(主端点),因为应用程序没有向 APIM 提供任何其他内容。

为什么函数应用程序只显示一个 http 函数?我应该更改什么才能获取所有函数的列表?

这是Azure功能的截图: azure function overview of functions

这是 function.json 文件的屏幕截图: function.json file

在 C# 中,不需要更改 function.json 文件。它能够自动识别它。

这是端点之一的 NestJS 代码:

主要.azure.ts

    export async function createApp(): Promise<INestApplication> {
    const app = await NestFactory.create(AppModule);
     app.setGlobalPrefix('api');
     app.enableCors(corsOptions);

     app.use(json({ limit: '50mb' }));
     app.use(urlencoded({ extended: true, limit: '50mb' }));

     app.enableShutdownHooks();

     await app.init();
     return app;
    }

main函数index.ts:

import { Context, HttpRequest } from '@azure/functions';
import { AzureHttpAdapter } from '@nestjs/azure-func-http';
import { createApp } from 'src/main.azure';

function createPsuedoApp(createApp: () => Promise<any>): () => Promise<any> {
  return async (): Promise<any> => {
    const app = await createApp();
    const psuedoApp = {
      getHttpAdapter: () => {
        return {
          getInstance: () => {
            return (req: any, res: any) => {
              const done = req.context.done;
              req.context.done = (err?: string | Error, result?: any) => {
                res.writeHead();
                done(err, result);
              };
              app.getHttpAdapter().getInstance()(req, res);
            };
          },
        };
      },
    };
    return psuedoApp;
  };
}

export default function (context: any, req: HttpRequest): void {
  AzureHttpAdapter.handle(createPsuedoApp(createApp), context, req);
}

应用程序控制器:


@Controller('APP')
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHelloWorldFromApp() {
    return 'Hello Wolrd';
  }
}
azure-functions azure-api-management
1个回答
0
投票
  • 为了在 NestJS 函数中添加多个触发器,请导航到函数的根目录,然后执行
    func new
    命令添加新触发器。这将创建一个包含 index.ts 和 function.json 文件的单独文件夹。

enter image description here

enter image description here

  • 部署后,我可以在函数应用程序中看到两个触发器。

enter image description here

  • 或者您也可以将不同的路线添加到同一文件,但它会在功能应用程序中向您显示一个主要触发器,其中将包含所有不同的路线。
  • 具有两条不同路线的单一功能。
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }

  @Get('hello')
  getHelloMessage(): string {
    return this.appService.getHelloMessage();
  }
}
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }

  getHelloMessage(): string {
    return 'Hello from the second trigger!';
  }
}

  • 对于第二条路线,您不需要添加任何单独的 function.json 文件。
© www.soinside.com 2019 - 2024. All rights reserved.