【问题标题】:Use NestJs package in nodejs/express project在 nodejs/express 项目中使用 NestJs 包
【发布时间】:2019-01-24 15:23:35
【问题描述】:

我开发了一个 Nest JS 模块。我使用 npm publish 在 npm 上发布了它。

现在我想在基于 nodejs 和 express 的项目中使用 NestJS 模块。

请告知我是否可以在 node/express 项目中使用 nestjs 模块。如果是,是否有任何可用的文档。

根据用户的评论添加更多细节。

这是一种库,它的模块导出的方法很少。这些方法包含调用 aws sns 服务发送推送通知的实现。

我找到了一个正在尝试使用它的链接。

https://codeburst.io/https-chidume-nnamdi-com-npm-module-in-typescript-12b3b22f0724

提前致谢。

【问题讨论】:

  • 这个问题太宽泛了,目前无法回答。您的模块包含哪些内容?是中间件、服务、管道等吗?请更清楚您的实际代码的作用
  • 编辑帖子以包含更多详细信息。

标签: nestjs


【解决方案1】:

因为 NestJS 模块本身就是一个 express 应用程序的模块,所以您可以做些什么来使该模块在另一个当前未使用 NestJS 的应用程序中可用,将其挂载为 sub app

我已经构建了一个 NestJS 模块并将其安装为 vanilla express 应用程序的子应用程序,您可以在这里借用我的示例测试:https://github.com/tzkmx/nestjs-graphql-as-express-subapp

关键是将您的模块导出为已初始化的子应用程序,如果不使用 NestJS 框架本身,您无法将模块直接安装在另一个快速应用程序中。

// src/sub-app/boot.js
import { NestFactory } from '@nestjs/core'
import { SubAppModule } from './module'

export default async function bootstrap () {
  const app = await NestFactory.create(SubAppModule)

  return app
}
// src/app.js
import bootstrapSubApp from './sub-app/boot'
import express from 'express'

const app = express()

app.get('/', (req, res) => res.send('hello express\n'))

async function mountSubApp (app, mountPath, subAppBoot) {
  const subApp = await subAppBoot()
  await subApp.init()

  app.use(mountPath, subApp.getHttpAdapter().getInstance())
  return app
}

mountSubApp(app, '/sub', bootstrapSubApp)
.then(app => app.listen(4000))

如您所见,需要先调用subApp.init(),然后使用subApp.getHttpAdapter().getInstance() 获取express 实例以将其挂载到vanilla js express 应用程序中。

【讨论】:

  • 这个我没试过。但是我所做的是在 main.ts/index.ts 中导出方法,无论你有什么文件作为入口点,我都可以通过在另一个应用程序中安装这个包来调用这些方法。
【解决方案2】:

只是为了更新。

我在 main.ts/index.ts 中导出方法,无论哪个文件是您的入口点。

后来我做了

1: npm 运行构建 2:npm 发布。

当我在 express/nest 的另一个项目中安装已发布的包后,我能够调用方法。

谢谢

【讨论】:

    【解决方案3】:

    您可以使用 ExpressAdapter 在您的 nest.js 应用程序中托管 express 应用程序。

    import { NestFactory } from '@nestjs/core'
    import { SubAppModule } from './sub-app/module'
    import {ExpressAdapter} from "@nestjs/core/adapters/express-adapter";
    import {expressApp} from "./expressApp";
    
    async function bootstrap () {
      const app = await NestFactory.create(SubAppModule, new ExpressAdapter(expressApp))
      app.listen(4444)
      return app
    }
    
    bootstrap()
    

    您可能会看到基于@Jesús Franco 原始示例的完整示例: https://github.com/eylonmalin/nestjs-graphql-as-express-subapp

    【讨论】:

      猜你喜欢
      • 2022-11-09
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 2020-12-12
      • 1970-01-01
      • 2019-10-22
      • 2021-04-15
      • 2019-05-25
      相关资源
      最近更新 更多