从 Phoenix / Elixir GET 函数中调用 Typescript 函数

Posted

技术标签:

【中文标题】从 Phoenix / Elixir GET 函数中调用 Typescript 函数【英文标题】:Call Typescript function from within an Phoenix / Elixir GET function 【发布时间】:2021-08-10 19:40:01 【问题描述】:

我目前正在从事 Elixir / Phoenix 项目。我有一些我想在 GET 函数中运行的打字稿代码。这方面的最佳做法是什么?

为了提供更多上下文,我需要动态创建 Apple pkpass 文件。问题是,创建 pkpass 文件很复杂,没有 Elixir 库来处理这个创建,但是有一个 node.js 包来处理这个,叫做https://github.com/walletpass/pass-js。

我已经构建了一个 typescript 类来处理 pkpass 文件的创建,但是我无法使用我用 Elixir 编写的 Phoenix 项目中的这个 typescript 类。如何做到这一点?

【问题讨论】:

【参考方案1】:

两个流行的选项:

    将您的 TypeScript 类封装在 CLI 包装器中并将其用作程序

    使用 Execjs 或 elixir-nodejs 之类的东西

考虑到pass-js 的复杂性以及如何配置它,我绝对建议您从第一种方法开始。

开发命令行界面

首先,为您的 TS 代码开发 CLI。建议:您应该接受参数,生成文件,并将生成的文件路径打印到stdout

这是一个基本指南:https://walrus.ai/blog/2019/11/typescript-cli/

调用你的程序!

然后,使用 System.cmd/3 在 Elixir 中调用您的程序。

output, code = System.cmd("/path/to/your/program", ["program", "arguments"])
file_path = String.trim(output)

# file_path is the path of the generated pkpass
# (if you print the generated file path to stdout)
#
# code is the exit code of the program.
# 0 means success, anything else means error (you should develop that in your CLI interface)

程序界面由您决定。我建议你从简单的开始。

例如,您还可以返回 JSON 并使用 Jason 对其进行解析。或者您可以将二进制文件打印到 stdout 并直接读取,但这种方法有额外的复杂性。

【讨论】:

以上是关于从 Phoenix / Elixir GET 函数中调用 Typescript 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 elixir/phoenix 从 csv 文件导入用户?

GraphQL Elixir/Phoenix API:Socket 挂起,响应很大

Phoenix/Elixir - 协议 Enumerable 未实现

mix deps.get 失败(依赖问题)

sh Elixir Phoenix Cheatsheet

在 Phoenix / Elixir 中启用跨域资源共享 CORS