使用 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.
中涉及更多
我有一个简单的 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.