Meteor.JS Использовать внешний скрипт (на сервере)

Я новичок в Meteor.JS и пытаюсь использовать скрипт на сервере. Когда мне понадобился скрипт на клиенте, я просто использовал jQuery $.getScript(my-script.js) для его загрузки, но на сервере я получаю ошибку $ is not defined, предположительно потому, что jQuery не загружен на сервер. Как я могу добиться на стороне сервера результата, аналогичного вызову $.getScript()?


person Ruben Martinez Jr.    schedule 10.11.2014    source источник
comment
Можете ли вы объяснить свой вариант использования немного больше? почему недостаточно просто добавить файл в папку проекта? Вы знаете только во время выполнения, какой скрипт вы хотите загрузить?   -  person Christian Fritz    schedule 10.11.2014
comment
^ Вы правы, я не знал, что смогу сделать это и добиться такого же эффекта. Однако я должен добавить, что мне (как ни странно) пришлось изменить некоторые объявления переменных в скрипте, который я загружал, чтобы они были глобальными. Рассмотреть вопрос об уходе в качестве ответа?   -  person Ruben Martinez Jr.    schedule 10.11.2014


Ответы (3)


Вам не нужно загружать внешние скрипты вручную, вы можете просто добавить их в виде файлов в папку вашего проекта. Все файлы в ваших папках будут загружены метеором. См. раздел документации Распределение имен, чтобы узнать, как сделать определения доступными глобально, а не только внутри скрипта.:

// File Scope. This variable will be visible only inside this
// one file. Other files in this app or package won't see it.
var alicePerson = {name: "alice"};

// Package Scope. This variable is visible to every file inside
// of this package or app. The difference is that 'var' is
// omitted.
bobPerson = {name: "bob"};
person Christian Fritz    schedule 10.11.2014

Я бы не советовал этот процесс, особенно на сервере. Это подвергает вас множеству рисков. Метод .getScript использует eval, что создает уязвимость удаленного выполнения кода в вашем приложении.

Тем не менее, вы можете использовать пакет http

meteor add http

Затем вы можете получить скрипт и выполнить его:

var jsCode = HTTP.get("<full url>").content;
eval(jsCode);
person Tarang    schedule 10.11.2014

Если вы используете сторонний скрипт, лучше всего создать пакет для его переноса. В пакете вы должны экспортировать глобальные переменные пакета: api.export('GlobalVariable')

Если вы добавляете свой скрипт в папку сервера, не используйте var, иначе он останется только глобальным для области действия файла.

jQuery не существует на сервере, и на то есть веская причина: вам нужен DOM, чтобы использовать его. Для этого вы можете использовать phantomjs: jquery на стороне сервера

Не весь код работает на клиенте и сервере.

person Mário    schedule 11.11.2014