Я пытаюсь использовать модуль npm в нод-красном, после некоторых исследований я столкнулся с использованием глобального контекста и сделал следующее:
Добавлен файл require.js в моем каталоге node-red, например:
functionGlobalContext: { aesjs:require('aes-js'),},
Добавлено требование в мой файл red.js require (на всякий случай):
var aesjs = require('aes-js');
Установил модуль aes-js
глобально и в директории node_modules
узла красного цвета
Я бы вызвал модуль в функции узла, вызвав глобальный контекст:
var aesjs = global.get('aesjs');
Проблема в том, что после выполнения моего потока переменная aesjs не определена, и я получаю следующее сообщение об отладке:
"TypeError: Cannot read property 'ModeOfOperation' of undefined"
Что относится к следующему коду:
var aesjs = global.get('aesjs');
var aesEcb = new aesjs.ModeOfOperation.ecb(key);
В сущности, я опирался на эту запись , но не могу понять, почему переменная не определена, это вопрос асинхронности, если да, то как?
Вот экспорт моего экспериментального потока, просто чтобы убедиться, что не были допущены глупые ошибки:
[{"id":"205673d0.6ffd3c","type":"inject","z":"6affe53a.7dabcc","name":"","topic":"","payload":"{ \"id\": \"474192\" }","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":200,"y":420,"wires":[["f2c2083b.0afae8"]]},{"id":"f2c2083b.0afae8","type":"function","z":"6affe53a.7dabcc","name":"encrypt clientUid","func":"var aesjs = context.global.get('aesjs');\nvar gsm = msg.payload.id; \n\nvar key = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ];\n\nfunction gsmEncode(gsm,key)\n {\n var textBytes=[];\n \n for ( i = 0; i < gsm.length; ++i)\n {\n var charCode = gsm.charCodeAt(i);\n textBytes.push(charCode & 0xFF);\n }\n \n return(bytesEncode(textBytes,key));\n }\n\nfunction bytesEncode(bytes,key)\n {\n for ( i = bytes.length;i<16; ++i)\n bytes.push(0);\n \n var aesEcb = new aesjs.ModeOfOperation.ecb(key);\n var encryptedBytes = aesEcb.encrypt(bytes);\n \n return(Buffer.from(encryptedBytes).toString('base64'));\n \n }\n\nmsg.payload.encodedId = gsmEncode(gsm,key);\n\nreturn msg; ","outputs":1,"noerr":0,"x":480,"y":420,"wires":[["fab2be23.e888d"]]},{"id":"fab2be23.e888d","type":"debug","z":"6affe53a.7dabcc","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":810,"y":420,"wires":[]}]