Проблемы в require(‹Module›) в самописном узле Node-RED

Я добавил самописную библиотеку WebSocket-Client. Когда я require в node.js, он работает нормально, так же, как и в узле-функции Node-RED с его регистрацией в settings.js и требованием global.get("RWSjs").

Теперь мне пришлось написать узел самому и я хотел потребовать этот файл, а он не работает. Node-RED всегда выдает мне ошибку «узел не развернут», что, я думаю, из-за синтаксической ошибки javascript.

Как я могу потребовать самостоятельно написанный модуль в .js самостоятельно написанного узла?

Заранее большое спасибо, Петр :)

Изменить:

какой-то код:

eval-R-char.js (Код узла)

module.exports = function(RED) {               

    // doesn't work:
    var RWSjs = global.get("RWSjs");

    function EvalRCharNode(config) {            
        RED.nodes.createNode(this,config);      

        this.instruction = config.instruction;
        var node = this;
        this.on('input', function(msg) {        
            //msg.payload = msg.payload.toLowerCase();
            msg.payload = "Instruction: " + this.instruction;
            node.send(msg);                     
        });                                     
    }
    RED.nodes.registerType("eval-R-char",EvalRCharNode); 
}

person Peter_St    schedule 25.08.2016    source источник
comment
Вам придется поделиться некоторым кодом и выводом консоли node-red, если вы хотите, чтобы мы помогли. Также как/где вы развернули свой самописный модуль   -  person hardillb    schedule 25.08.2016
comment
Извините, забыл опубликовать код, я добавил его в вопрос. Теперь поток состоит из ввода и вывода отладки. Я протестировал узел, не требуя моего файла RWSjs, и тесты сработали, он дал предполагаемый результат теста Instruction: print(hello). Когда я добавил строку global.get, появилась ошибка «Узел не развернут». Я развернул свой модуль, отредактировав Node-RED settings.js в functionGlobalContext. Я добавил строку RWSjs:require('./jsModules/RWSjs.js'); в функциональном узле все работало нормально.   -  person Peter_St    schedule 25.08.2016


Ответы (1)


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

Вы должны просто require как обычно в своем пользовательском узле.

Итак, в этом случае:

module.exports = function(RED) {               

    //assuming your module is in the RWS.js file in the same directory
    var RWSjs = require('./RWS.js');

    function EvalRCharNode(config) {            
        RED.nodes.createNode(this,config);      

        this.instruction = config.instruction;
        var node = this;
        this.on('input', function(msg) {        
            //msg.payload = msg.payload.toLowerCase();
            msg.payload = "Instruction: " + this.instruction;
            node.send(msg);                     
        });                                     
    }
    RED.nodes.registerType("eval-R-char",EvalRCharNode); 
}
person hardillb    schedule 25.08.2016
comment
Хорошо, я понял - я думал, что это ограничение песочницы функционального узла также действует в пользовательских узлах - большое спасибо! - person Peter_St; 25.08.2016