You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS项目中如何正确接入使用node-deep-links深度链接库

直接在main.ts中调用原生实例的app.get注册路由不生效,核心是NestJS自身的路由系统优先级、全局前缀、全局中间件逻辑会拦截/覆盖你手动注册的原生路由,按下面的方式配置即可正常使用:

推荐实现(符合NestJS开发规范)

  1. 先确认依赖已安装:
npm install node-deep-links
  1. 在Controller层直接挂载deeplink处理逻辑,不要零散写在main.ts中:
import { Controller, Get, Req, Res } from '@nestjs/common';
import { deeplink } from 'node-deep-links';
import { Request, Response } from 'express';
// 若使用Fastify适配器,替换为fastify对应的Request、Response类型即可

@Controller()
export class DeepLinkController {
  @Get('deeplink')
  triggerDeepLink(@Req() req: Request, @Res() res: Response) {
    // 直接透传请求响应给库提供的处理函数
    return deeplink({
      fallback: 'https://cupsapp.com',
      android_package_name: 'com.citylifeapps.cups',
      ios_store_link: 'https://itunes.apple.com/us/app/cups-unlimited-coffee/id556462755?mt=8&uo=4',
    })(req, res);
  }
}

注意:使用@Res()注入原生响应对象后,NestJS会默认将该路由的响应处理权交还给业务代码,不会自动套用全局响应拦截器的结构包装逻辑,不会打断库自身的跳转响应逻辑。

必要配套配置

  • 如果项目设置了全局路由前缀,需要在main.ts中排除deeplink路由,避免路径变成带前缀的地址:
import { RequestMethod } from '@nestjs/common';

// 设置全局前缀时添加排除规则
app.setGlobalPrefix('api', {
  exclude: [{ path: 'deeplink', method: RequestMethod.GET }]
});
  • 调试时不要直接用桌面端浏览器默认访问localhost测试,库的跳转逻辑依赖请求头的User-Agent判断客户端类型,本地测试可以用接口调试工具修改UA模拟安卓、iOS端请求,校验返回的跳转地址是否符合预期。

不推荐的main.ts直接注册方式

如果一定要在main.ts中直接注册路由,必须将注册代码放在await app.listen()启动逻辑之前,同时确保没有任何NestJS路由、全局中间件会匹配拦截/deeplink路径,这种方式和NestJS自身生命周期耦合度高,后续迭代容易出问题,不建议使用。

内容的提问来源于stack exchange,提问作者Ali Shame

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:36:14