Как использовать экспорт и импорт CommonJS с SocketIO? - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь немного модулировать свой серверный код с помощью CommonJS Modules.Пока это мой модуль с функцией в motorDriver.js файле:

var rpio = require('rpio');

function motorDriver() {

    this.makeStep = function(pin) {
        rpio.open(pin, rpio.OUTPUT, rpio.LOW);

        /* On for 1 second */
        rpio.write(pin, rpio.HIGH);
        rpio.sleep(data.interval);

        /* Off for half a second (500ms) */
        rpio.write(pin, rpio.LOW);
    }
  }

  module.exports = motorDriver;

Затем я пытаюсь импортировать его и использовать его так же, как в server.js:

var motorDriver = require('./motorDriver');

io.on('connection', function (socket) {
    var motor = motorDriver()

    socket.on('make step', function () {
        console.log("Make Step");
        motor.makeStep(40)
    });
});

Когда я запускаю этот разъем нажатием кнопки, я получаю сообщение об ошибке:

TypeError: Cannot read property 'makeStep' of undefined
    at Socket.<anonymous> (/Users/gov-sur/Documents/CamSlider/server.js:38:15)
    at Socket.emit (events.js:182:13)
    at /Users/gov-sur/Documents/CamSlider/node_modules/socket.io/lib/socket.js:528:12

Кто-нибудь знает, что я делаю неправильно или где лежит мое понимание мисс?

Заранее спасибо!

1 Ответ

0 голосов
/ 06 мая 2019

Начал экспортировать весь модуль. Я просто экспортировал каждую функцию по отдельности:

function makeStep (pin) {
        rpio.open(pin, rpio.OUTPUT, rpio.LOW);

        /* On for 1 second */
        rpio.write(pin, rpio.HIGH);
        rpio.sleep(0.0001);

        /* Off for half a second (500ms) */
        rpio.write(pin, rpio.LOW);
    }

module.exports = {
    makeStep
}

Таким образом, я смог использовать его, как указано в исходном вопросе, но не инициализировал его как объект:

var motorDriver = require('./motorDriver');

io.on('connection', function (socket) {
    var motor = motorDriver

    socket.on('make step', function () {
        console.log("Make Step");
        motor.makeStep(40)
    });
});
...