首页 > 解决方案 > NestJS 使用回调实现 express POST 调用

问题描述

我正在尝试在处理 Google Assistant 语音对话的现有服务器中实现 NestJS。我正在从使用 express 的设置转移到带有 Controller 和 Post 装饰器的 NestJS。

在之前的设置中,我使用 express 来处理路由,这将调用一个回调,它接收传入的请求并创建聊天机器人的响应。该设置如下所示:

app.post("/google", this.googleController.callback);

现在我正在尝试使用 NestJS 做同样的事情,但我无法实现相同的结构。

@Controller("google")
export class GoogleController {

  public callback: IGoogleEndpoint;

  /**
   * Constructor
   */
  constructor() {
    this.callback = dialogflow();
    // setup callback
  };

  @Post()
  public Post(@Req() req: Request) {
    return this.callback(req.body);
  };

在之前的快速设置中,回调将对传入请求执行映射、处理它并为聊天机器人创建响应。这一切都在该回调中完成,因此我正在寻找一种解决方案,允许我将所有传入请求直接引导到回调中。

是否有可能在 NestJS 中创建类似的东西?

标签: typescriptdialogflow-esactions-on-googlenestjs

解决方案


您可以尝试将reqand发送res到库的callback方法,但这里最大的区别在于 Nest 控制器和 Express 路由处理程序如何管理路由。Nest 控制(req, res, next) => {})了大部分情况下的正常设置(如传统的路由处理程序),因此这就是当前callback在 Express 应用程序中传递的内容。一个可能的解决方案可能

@Controller("google")
export class GoogleController {

  public callback: IGoogleEndpoint;

  /**
   * Constructor
   */
  constructor() {
    this.callback = dialogflow();
    // setup callback
  };

  @Post()
  public Post(@Req() req: Request, @Res() res: Response) {
    return this.callback(req, res);
  };
}

尽管如此,您仍然可能需要找到一种方法来提供有意义的回调,以便当库尝试使用时next(),它仍然会成功调用。


推荐阅读