Правильный способ загрузки двоичного файла с сервера с использованием PureScript и Pulp
У меня есть простая функция javascript, которая создает XMLHttpRequest, запускает его (синхронно, чтобы сделать вещи максимально простыми) и возвращает массив, который является результатом.
exports.loadBinFile = function() { ... }
У меня есть этот сценарий в файле js, x.js, и у меня есть соответствующий файл PureScript x.purs, и в нем:
foreign import loadBinFile :: forall e. Eff (fileLoad :: FILELOAD | e) (Array Int)
С этим все в порядке и хорошо, но я использую XMLHttpRequest, который является объектом браузера, и при попытке запустить целлюлозу я получаю сообщение об ошибке, что XMLHttpRequest не определен.
Я попытался установить пакет npm под названием xmlhttprequest, который содержит указанный объект, также пробовал похожий пакет bower, но оба не удаются.
Я относительно новичок в javascript, и я предполагаю, что то, как я пытаюсь сделать что-то неправильно, совершенно неверно. Каков будет правильный подход к этому?
Я полагаю, что это можно исправить, поместив сценарий в файл.html, но я хочу сделать это правильно, то есть, имея соответствующие файлы.purs и.js, и позволяя pulp выполнять свою работу.
Как мне это сделать?
Спасибо!
1 ответ
Вы могли бы дать purescript-affjax
попытка, которая основана на запросах XHR и работает как на узле, так и в браузере.
Если вы хотите продолжить делать это самостоятельно, причина XMLHTTPRequest
остается неопределенным даже после установки пакета для него через npm
это вам также нужно require
модуль, который он выставляет, когда находится в узле.
Мы используем xhr2
от npm
в Affjax, как я думаю, у нас были некоторые проблемы с 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()
, Вы можете увидеть что-то похожее, хотя немного больше в коде FFI affjax.