Print only work the first time and I need to restart the bluetooth to print again.
MarwenBenTalebAli opened this issue · 1 comments
MarwenBenTalebAli commented
I want to create a REST service with Node.js using Express that prints tickets to ESC/POS bluetooth printer.
The actual result my service print only the first time and I need to restart the bluetooth to print again.
I tried update my service to only look for the printer and return it but it only works a couple of times. I received this error in the console:
(node:16608) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added to [Device]. Use emitter.setMaxListeners() to increase limit (Use node --trace-warnings ... to show where the warning was created)
The expected result print data multiple times
Here is my printerService.js :
const { Printer } = require("escpos");
const Bluetooth = require("escpos-bluetooth");
const foundPrinter = async (name, address, channel, printData) => {
const PRINTER_NAME = name;
const PRINTER_ADDRESS = address;
const PRINTER_CHANNEL = channel;
const preferredPrinterAddress = "(" + PRINTER_ADDRESS + ")" + PRINTER_NAME;
const availablePrinters = await Bluetooth.findPrinters();
console.log("availablePrinters", availablePrinters);
const btPrinter =
availablePrinters && availablePrinters.length > 0
? availablePrinters.filter(
(p) =>
p &&
p.name === PRINTER_NAME &&
p.address === preferredPrinterAddress
)[0]
: false;
console.log("btPrinter", btPrinter);
return new Promise((resolve, reject) => {
if (btPrinter) {
if (!printData) {
resolve({ printer: btPrinter });
} else {
const device = new Bluetooth(PRINTER_ADDRESS, PRINTER_CHANNEL);
const printer = new Printer(device);
device.open(function (deviceError) {
if (!deviceError) {
printer
.font("a")
.align("ct")
.style("bu")
.size(1, 1)
.text("Text1")
.text("Text2")
.barcode("1234567", "EAN8")
.qrimage("qrImage", function (qrImageError) {
if (!qrImageError) {
this.cut();
this.close();
} else {
reject({
name: qrImageError.name,
message: qrImageError.message,
});
}
});
resolve({ printer: btPrinter });
} else {
reject({ name: deviceError.name, message: deviceError.message });
}
});
}
} else {
reject({
errorType: "ERROR_PRINTER_NOT_FOUND",
errorName: "PRINTER_NOT_FOUND",
message: "printer not found",
fullMessage:
"printer not found, availablePrinters: " +
availablePrinters.toString(),
});
}
});
};