Правильный способ загрузки двоичного файла с сервера с использованием 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.

Другие вопросы по тегам