【问题标题】:Can I share a service between Angular and Node?我可以在 Angular 和 Node 之间共享服务吗?
【发布时间】:2018-05-01 07:24:15
【问题描述】:

我的 Angular5 Typescript 应用程序中有一个标准实用程序服务。 我想与我的节点应用程序共享它,该应用程序正在为应用程序提供服务。

我找不到任何有关它的信息,但我认为问题如下:

  • 使用require()导入一个TS文件,如果生成的js文件 住在同一个地方
  • 忽略作为装饰器的@Injectable 用于角度服务。

我认为这是可能的,因为这是使用全栈 Javascript 的主要好处,但如何做到呢?

我在 NodeJs 中尝试过以下操作,但报错:

const utilService = require('../../src/app/services/util/util.service');

【问题讨论】:

  • 我觉得答案在于用 JS 编写服务代码的“胆量”。然后在 TS 中创建一个服务,它简单地包装或创建到 JS 代码的桥梁。然后就可以直接在node中导入JS代码了。
  • 找到什么了吗?其实我很想知道
  • 我认为最好的选择是创建一个私有的 npm 模块来继承

标签: javascript node.js angular typescript angular5


【解决方案1】:

我会创建一个包含您的实用程序请求的private npm package。

然后将其导入到您的 Angular 项目和节点项目中。

【讨论】:

  • 这实际上是个好主意 - 我只想使用一种方法,所以看看是否有另一种解决方案,否则将标记为正确
【解决方案2】:

我能想到的唯一方法是提供 util.service 的编译(ES2015 及更低版本)表示。这样做可能是构建脚本/管道的自动化部分。

或者,如果 util.service 不经常更改,则手动编译它

tsc ./src/app/services/util/util.service.ts --out ./src/app/services/util/util.service.js

【讨论】:

    【解决方案3】:

    你不能,打字稿它不是有效的 javascript。

    为此,您还必须编译节点代码,基本上有两种不同的打字稿配置,一种针对浏览器,另一种具有不同的入口点,针对节点。

    如果您这样做,那么您将能够在后端和前端之间共享一些代码。尽管使用 @injectable() 装饰器的服务无法正常工作。为什么?没有任何 Injector 可用于处理您的依赖注入。

    【讨论】:

      猜你喜欢
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 2020-05-16
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 2020-06-18
      相关资源
      最近更新 更多