使用 PureScript 和 Pulp 从服务器下载二进制文件的正确方法

Correct way to download a binary file from server using PureScript and Pulp

我有一个简单的 javascript 函数,它创建一个 XMLHttpRequest ,运行 它(同步地使事情尽可能简单)和 returns 一个作为结果的数组。

exports.loadBinFile = function() { ... }

我在 js 文件中有该脚本,x.js,我有一个匹配的 PureScript 文件 x.purs,在其中:

foreign import loadBinFile :: forall e. Eff (fileLoad :: FILELOAD | e) (Array Int)

一切都很好,但是我正在使用 XMLHttpRequest,它是一个浏览器对象,当我尝试 运行 pulp 运行 时,我收到一个错误,指出 XMLHttpRequest 是未定义。

我试过安装一个名为 xmlhttprequest 的 npm 包,其中包含所述对象,也尝试过类似的 bower 包,但都失败了。

我是 javascript 的新手,我认为我尝试犯错的方式是完全错误的。解决这个问题的正确方法是什么?

我想我可以通过将脚本放在 .html 文件中来解决这个问题,但我想正确地做到这一点,即具有匹配的 .purs 和 .js 文件,并让 pulp 完成它的工作。

我应该怎么做?

谢谢!

您可以 purescript-affjax 试一试,它基于 XHR 请求并且在 Node 和浏览器中都可以工作。

如果你想继续自己做,即使通过 npm 为它安装了一个包后 XMLHTTPRequest 仍然未定义的原因是你还需要 require它在节点中公开的模块。

我们在 Affjax 中使用 npm 中的 xhr2,因为我认为我们在使用 xmlhttprequest 时遇到了一些问题,因此使用该示例,在您的 FFI JS 中,您需要使用功能是这样的:

var newXHR = function () {
  if (typeof module !== "undefined" && module.require) {
    var XHR = module.require("xhr2");
    return new XHR();
  }
  return new XMLHttpRequest();
}

而不是仅仅尝试调用 new XMLHTTPRequest()。你可以看到类似的东西,尽管在 affjax FFI code.

中涉及更多