Si deseas deseas desarrollar una aplicación web que lea códigos de barras utilizando Node.js, puedes buscar un módulo de código de barras con npm o construir uno por tus propios medios. En este tutorial, te voy a ilustrar sobre cómo crear addon para leer códigos de barras en Ubuntu con DBR (Dynamsoft Barcode Reader para Linux).
Si deseas utilizar la última versión de node, no instales node y npm con la utilidad apt-get, ya que sólo obtendrás la versión antigua y provocarás el error - 'FunctionCallbackInfo' does not name a type:
Instalar Node
Descarga el último paquete de node: node-V5.3.0-linux-x64.tar.gz.
Extrae el paquete tal que así:
tar -xzf node-v5.3.0-linux-x64.tar.gz
Abre .bashrc
nano ~/.bashrc
Exporta el path node y guarda .bashrc
export PATH=$(YOUR_HOME)/Downloads/node-v5.3.0-linux-x64/bin:$PATH
Instala node-gyp
npm install -g node-gyp
Instala DBR
Descarga v4.0.0-pre-alpha.tar.gz
Extrae el paquete dbr
tar -xzf v4.0.0-pre-alpha.tar.gz
Encontrar la librería compartida cuando se construye el proyecto con make, crea un enlace simbólico del código de barras.
sudo ln -s $(DynamsoftBarcodeReader)/Redist/libDynamsoftBarcodeReaderx64.so /usr/lib/libDynamsoftBarcodeReaderx64.so
Como hacer el addon del lector de código de barras con Node
Crea binding.gyp y especifica las rutas de las cabeceras del DBR y las librerías compartidas:
{
  "targets": [
    {
      "target_name": "dbr",
      "sources": [ "dbr.cc" ],
      "include_dirs" : [
        "$(DynamsoftBarcodeReader)/Include"
      ],
      "libraries": [
        "-lDynamsoftBarcodeReaderx64", "-L$(DynamsoftBarcodeReader)/Redist"
      ]
    }
  ]
}
Crea dbr.cc usando el código de emplo provisto por Dynamsoft Barcode Reader SDK:
#include 
#include "If_DBR.h"
#include "BarcodeFormat.h"
#include "BarcodeStructs.h"
#include "ErrorCode.h"
using namespace v8;
// Barcode format
const char * GetFormatStr(__int64 format)
{
	if (format == CODE_39)
		return "CODE_39";
	if (format == CODE_128)
		return "CODE_128";
	if (format == CODE_93)
		return "CODE_93";
	if (format == CODABAR)
		return "CODABAR";
	if (format == ITF)
		return "ITF";
	if (format == UPC_A)
		return "UPC_A";
	if (format == UPC_E)
		return "UPC_E";
	if (format == EAN_13)
		return "EAN_13";
	if (format == EAN_8)
		return "EAN_8";
	if (format == INDUSTRIAL_25)
		return "INDUSTRIAL_25";
	if (format == QR_CODE)
		return "QR_CODE";
	if (format == PDF417)
		return "PDF417";
	if (format == DATAMATRIX)
		return "DATAMATRIX";
	return "UNKNOWN";
}
void DecodeFile(const FunctionCallbackInfo& args) {
	Isolate* isolate = Isolate::GetCurrent();
	HandleScope scope(isolate);
	// convert v8 string to char *
	String::Utf8Value fileName(args[0]->ToString());
	String::Utf8Value license(args[1]->ToString());
	char *pFileName = *fileName;
	char *pszLicense = *license;
	// Dynamsoft Barcode Reader: init
	__int64 llFormat = (OneD | QR_CODE | PDF417 | DATAMATRIX);
	int iMaxCount = 0x7FFFFFFF;
	ReaderOptions ro = {0};
	pBarcodeResultArray pResults = NULL;
	// Initialize license
	if (pszLicense)
	{
		printf("license: %sn", pszLicense);
		DBR_InitLicense(pszLicense);
	}
	else
		DBR_InitLicense("AC4561856D63EF392F46D7454052372D");
	ro.llBarcodeFormat = llFormat;
	ro.iMaxBarcodesNumPerPage = iMaxCount;
	// Decode barcode image
	int ret = DBR_DecodeFile(pFileName, &ro, &pResults);
	printf("ret: %dn", ret);
	if (ret == DBR_OK){
		int count = pResults->iBarcodeCount;
		pBarcodeResult* ppBarcodes = pResults->ppBarcodes;
		pBarcodeResult tmp = NULL;
		// javascript callback function
		Local cb = Local::Cast(args[2]);
		const unsigned argc = 1;
		// array for storing barcode results
		Local barcodeResults = Array::New(isolate);
		for (int i = 0; i < count; i++)
		{
			tmp = ppBarcodes[i];
			Local
Automáticamente generará los archivos del proyecto:
node-gyp configure
Construye el proyecto para producir dbr.node
node-gyp build
Escribe un test dbr.js que cargue la licencia SDK e invoque los métodos nativos de lectura:
var dbr = require('./build/Release/dbr');
var readline = require('readline');
var fs = require('fs');
fs.readFile('./license.txt', 'utf8', function (err, data) {
  if (err) throw err;
  var rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
  });
  var license = data.trim();
  rl.question("Please input a barcode image path: ", function(answer) {
    dbr.decodeFile(
      answer, license,
      function(msg){
        var result = null;
        for (index in msg) {
          result = msg[index]
          console.log(result['format']);
          console.log(result['value']);
          console.log("##################");
        }
      }
    );
    rl.close();
  });
});
Ejecuta el script
Y este ha sido el artículo en el que trataba explicaros como hacer un lector de código con Node.js para Linux, esperamos que te haya gustado y sepas aplicarlo en tus futuros proyectos. Ya sabes que si nos quieres proponer un tema que quieres ver reflejado como un tutorial o como una práctica, solo tienes que hacer uso del área de comentarios de un poco más abajo. Por el contrario, si quieres enviarnos tus propios tutoriales, puedes hacerlo a través de la intranet de usuarios que está habilitada para ello, a través del menú Enviar Tutorial. Ya sabes, ayúdanos a crecer con tus conocimientos. ¡Un saludo y feliz código!
