Nodejs



  • Не знаю это баг или так и должно быть но для новичков не очень удобно.
    Сессия nodejs перезапускается если открыть действие "Node.js"
    Например создаем глобальную переменную в одном из действий
    Вызываем переменную с другого действия "Node.js" все работает как положено, стоит открыть редактор действия "Node.js" глобальная переменная пропадает приходится возвращаться в начала тестовый скрипт добавил.

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

    7aa1900a-2b64-41c6-b80c-f664d78eb51f-image.png

    test.xml



  • @GamiD said in Nodejs:

    Не знаю это баг или так и должно быть но для новичков не очень удобно.
    Сессия nodejs перезапускается если открыть действие "Node.js"
    Например создаем глобальную переменную в одном из действий
    Вызываем переменную с другого действия "Node.js" все работает как положено, стоит открыть редактор действия "Node.js" глобальная переменная пропадает приходится возвращаться в начала тестовый скрипт добавил.

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

    test.xml

    Глобальную переменную можно объявлять без записи её в объект global, просто объявите её без var

    Я не так глубоко разбирал работу node и возможно где то не прав, по этому выскажу личное мнение:
    Посмотрите код действия node js

    _embedded("z8hknrrabq", "Node", "8.6.0", "", 60000 )!
    

    первым аргументом функции _embedded является строка "z8hknrrabq", это имя js файла хранящегося в директории

    \BrowserAutomationStudio\apps\22.6.5\embedded\*ХЕШ*\distr\lib\custom\
    

    c6190d5b-fa4b-4d3e-937e-8acdc3d5436c-изображение.png

    В этом файле и содержится код действия node js. Именно по этому и не работает копирование кубика в другой проект, само действие пытается открыть файл, а его может не быть в другом проекте. В коде проекта информация о файлах и коде в них содержится в теге <EmbeddedData>:

         <EmbeddedData><![CDATA[[{"data":"global.qqq = 'Видит глобальную переменную'\r\nglobal.www = 'Не видит глобальную переменную после редактирования действия'","data_name":"z8hknrrabq","data_type":0,"language_name":"Node","language_version":"8.6.0"},{"data":"console.log(qqq)","data_name":"fz0xjv06rgv","data_type":0,"language_name":"Node","language_version":"8.6.0"},{"data":"console.log(www)","data_name":"gnbqh7ssqlb","data_type":0,"language_name":"Node","language_version":"8.6.0"}]]]></EmbeddedData>
    

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



  • @Fox _embedded("z8hknrrabq", "Node", "8.6.0", "", 60000 )!
    если бы во время работы можно было бы хотя бы редактировать файл z8hknrrabq
    то проблем не возникло бы
    после редактирования кода через BAS обновляет этот файл z8hknrrabq и код сохраняет у себя в буфере ручное редактирование этого файла ничего не меняет



  • @GamiD said in Nodejs:

    @Fox _embedded("z8hknrrabq", "Node", "8.6.0", "", 60000 )!
    если бы во время работы можно было бы хотя бы редактировать файл z8hknrrabq
    то проблем не возникло бы
    после редактирования кода через BAS обновляет этот файл z8hknrrabq и код сохраняет у себя в буфере ручное редактирование этого файла ничего не меняет

    Продублирую здесь ответ @support

    Процесс с node.js полностью перезапускается при любом изменении кода так сделано специально, чтобы избежать
    ошибок вроде "код закешировался и не изменился после обновления".
    

    и

    Рекомендуется избавиться от использования глобальных переменных вообще.
    


  • @Fox

    использования глобальных переменных вообще.

    Можно взамен им использовать возможности кэширования модуля, но для большинства это сложнее.



  • А есть возможность выполнять скрипт из файла js
    чтобы читал файл и выполнял

    const fs = require("fs");
    
    let fileContent = fs.readFileSync("C:/index.txt", "utf8");
    eval(fileContent);
    

    такой код выдает ошибку если код содержит console.log или [[VARIABLE]] так же вроде еще некоторые коды



  • @GamiD said in Nodejs:

    такой код выдает ошибку если код содержит console.log или [[VARIABLE]] так же вроде еще некоторые коды

    Метод eval() выполняет JavaScript код, представленный строкой. Далеко не всё api BAS этот метод сможет выполнить.
    Для определения переменной BAS через eval() нужно записывать их с приставкой VAR_

    eval("VAR_HELLO = 'hello'")
    

    тестовый скрипт



  • @Fox да все верно так же там console.log пишется как BAS_CONSOLE_LOG примерно так а есть альтернатива eval чтоб обработал весь файл?



  • @GamiD said in Nodejs:

    @Fox да все верно так же там console.log пишется как BAS_CONSOLE_LOG примерно так

    console.log выводит информацию в node, а не в BAS. Что бы увидеть информацию в логе BAS и происходит замена

    а есть альтернатива eval чтоб обработал весь файл?

    В BAS нет готового метода, который выполнил бы код с api BAS представленный строкой. Самое близкое по смыслу:
    https://community.bablosoft.com/topic/10824/поддержка-javascript-правильно-добавить/15



  • @Fox said in Nodejs:

    В BAS нет готового метода, который выполнил бы код с api BAS представленный строкой. Самое близкое по смыслу:
    https://community.bablosoft.com/topic/10824/поддержка-javascript-правильно-добавить/15

    а есть возможность подключить файл js типо как модуль но чтоб при выполнение без перезапуска сессии выполнял код из js



  • @GamiD said in Nodejs:

    @Fox said in Nodejs:

    В BAS нет готового метода, который выполнил бы код с api BAS представленный строкой. Самое близкое по смыслу:
    https://community.bablosoft.com/topic/10824/поддержка-javascript-правильно-добавить/15

    а есть возможность подключить файл js типо как модуль но чтоб при выполнение без перезапуска сессии выполнял код из js

    Чегось?



  • @Fox например есть файл C:/index.js как мне выполнить содержимый код из этого файла в Node.js
    вот как на скриншоте только не встроенный файл а отдельный чтобы он не кешировался басом
    2444d3e9-7eb7-4e70-a89c-44a41275d417-image.png



  • @GamiD said in Nodejs:

    @Fox например есть файл C:/index.js как мне выполнить содержимый код из этого файла в Node.js
    вот как на скриншоте только не встроенный файл а отдельный чтобы он не кешировался басом

    Для выполнения кода с api BAS из файла я скидывал ссылку выше, для остального подойдёт простой eval(). Получайте строку любым удобным для вас способом и выполняйте его через eval().



  • @GamiD Мне кажется ты преувеличиваешь проблему ) Либо у тебя через раз кубик с нодой в скрипте и ты что-то методом тыка все время правишь, но это говорит о том, что ты что-то не так делаешь )



  • @UserTrue Возможно что то делаю не так но про кубики через раз ты попал в точку мне как раз это и нужно


Log in to reply
 

  • 1
  • 1
  • 12
  • 20
  • 2
  • 3
  • 6
  • 9