Я создаю приложение для узла и пытаюсь аккуратно организовать свой код.Я написал последовательный модуль, который импортирует последовательные библиотеки и обрабатывает соединение.Мое намерение состояло в том, чтобы написать базовый модуль и затем использовать его снова и снова в различных проектах по мере необходимости.Единственная часть, которая изменяется в зависимости от использования - это обработка поступающих последовательных данных.По этой причине я хотел бы вытащить следующий обработчик и переопределить его в соответствии с потребностями проекта.Как я могу использовать экспорт модулей, чтобы переопределить только этот раздел файла?
Я попытался добавить myParser
к экспорту, но это дает мне ноль, и я бы вышел за рамки.
Обработчик для переопределения / изменения / перегрузки для каждого нового проекта
myParser.on('data', (data) => {
console.log(data)
//DO SOMETHING WITH DATA
});
Пример использования: main.js
const serial = require('./serial');
const dataParser = require('./dataParser');
const serial = require('./serial');
//call connect with CL args
serial.connect(process.argv[2], Number(process.argv[3]))
serial.myParser.on('data',(data) => {
//Do something unique with data
if (dataParser.parse(data) == 0)
serial.send('Error');
});
Полный модуль JS ниже serial.js
const SerialPort = require('serialport');
const ReadLine = require('@serialport/parser-readline');
const _d = String.fromCharCode(13); //char EOL
let myPort = null;
let myParser = null;
function connect(port, baud) {
let portName = port || `COM1`;
let baudRate = baud || 115200;
myPort = new SerialPort(portName, {baudRate: baudRate})
myParser = myPort.pipe(new ReadLine({ delimiter: '\n'}))
//Handlers
myPort.on('open', () => {
console.log(`port ${portName} open`)
});
myParser.on('data', (data) => {
console.log(data)
});
myPort.on('close', () => {
console.log(`port ${portName} closed`)
});
myPort.on('error', (err) => {
console.error('port error: ' + err)
});
}
function getPorts() {
let portlist = [];
SerialPort.list((err, ports) => {
ports.forEach(port => {
portlist.push(port.comName)
});
})
return portlist;
}
function send(data) {
myPort.write(JSON.stringify(data) + _d, function (err) {
if (err) {
return console.log('Error on write: ', err.message);
}
console.log(`${data} sent`);
});
}
function close() {
myPort.close();
}
module.exports = {
connect, getPorts, send, close
}