Making Online Barcode Reader on Linux with Node.js

Previously, I shared an article How to Make Node Barcode Reader Addon on Linux, which illustrates how to create a node barcode addon by wrapping Dynamsoft Barcode Reader SDK on Linux. Since Node.js was born for developing network programs, let’s take a glimpse of how to create a Web barcode reader using the node barcode addon.

Getting Started

I assume you have successfully built the using node-gyp. If not, please read the relevant post before taking the following steps.

Basic Steps of Reading Barcode Online

  1. Upload barcode images or transfer image URLs to a Web server.
  2. Save barcode images to designated folder on the Web server.
  3. Decode barcode images and send results back to Web clients.

Install Express and Formidable

Express is a Web framework for Node.js. To install Express:

npm install express --save

Formidable is a node.js module for parsing form data. To install Formidable:

npm install formidable --save


var formidable = require('formidable');
var util = require('util');
var express = require('express');
var fs = require('fs');
var app = express();
var path = require('path');
var dbr = require('./build/Release/dbr');
var http = require('http');

Load Static Resources in Express

Create a static HTML page index.htm with CSS files and JavaScript files:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
<html xmlns="">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Dynamsoft Barcode Reader Nodejs Demo</title>
    <link type="text/css" rel="stylesheet" href="assets/css/style.css" />

    <script type="text/javascript" src="assets/js/jquery-1.11.2.js"></script>

    <div id="wrapper">
        <div id="dbr-nodejs">
                Dynamsoft Barcode Reader Nodejs Demo</h1>
            <!--<form action="">-->
            <div class="step step1">
                <div id="fileUpload" class="getFile">
                    <span class="num">1</span>
                        Upload from local:</h4>
                    <input type="file" id="fileToUpload" onchange="fileSelected();" />
                    <input type="text" readonly="readonly" id="filename" />
                    <input type="button" />
                    <a class="clickSwitch" href="javascript:void(0);">or, Specify an URL</a>
                <div id="fileDownload" class="hidden getFile">
                    <span class="num">1</span>
                        Specify an URL:</h4>
                    <input type="text" id="imageURL"/>
                    <!--<input type="button"/>-->
                    <a class="clickSwitch" href="javascript:void(0);">or, Upload from local</a>
            <div class="step step2">
                <span class="num">2</span>
                    Barcode Types:</h4>
                <ul class="barcodeType">
                    <li class="on">
                        <label for="chkLinear">
                            <input id="chkLinear" name="BarcodeType" type="checkbox" checked="true" value="0x3FF">
                            <span>Linear</span><br />
                            <div class="imgWrapper">
                                <img src="assets/images/oned.gif" width="90" alt="Barcode Type Linear" /></div>
                        <label for="chkQRCode">
                            <input id="chkQRCode" name="BarcodeType" type="checkbox" value="0x4000000">
                            <span>QRCode</span><br />
                            <div class="imgWrapper">
                                <img src="assets/images/qr.gif" width="60" alt="Barcode Type QRCode" /></div>
                        <label for="chkPDF417">
                            <input id="chkPDF417" name="BarcodeType" type="checkbox" value="0x2000000">
                            <span>PDF417</span><br />
                            <div class="imgWrapper">
                                <img src="assets/images/pdf417.gif" width="100" height="38" alt="Barcode Type PDF417" /></div>
                        <label for="chkDataMatrix">
                            <input id="chkDataMatrix" name="BarcodeType" type="checkbox" value="0x8000000">
                            <span>DataMatrix</span><br />
                            <div class="imgWrapper">
                                <img src="assets/images/dm.gif" width="60" alt="Barcode Type DataMatrix" /></div>
            <div class="step step3">
                <span class="num">3</span> <a id="readBarcode" name="RecgabtnCssBarcode" onclick="doReadBarcode();">
                <div id="resultBox">


Create server.js and specify the resource directory in express.static:


Parse Form and Save Uploaded Files with Formidable

var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
            var dir = 'uploads';
            var flag = fields.uploadFlag;
            var barcodeType = parseInt(fields.barcodetype);

            fs.readFile(files.fileToUpload.path, function(err, data) {
                        // save file from temp dir to new dir
                        var fileName = path.join(__dirname, dir,;
                        fs.writeFile(fileName, data, function(err) {
                            if (err) throw err;

                            decodeBarcode(res, license, fileName, barcodeType);


Download Files with Node.js

                    var tmpFileName = path.join(__dirname, dir, 'tmp.jpg');
                    var tmp = fs.createWriteStream(tmpFileName);
                    var url = fields.fileToDownload;
                    console.log('url: ' + url);
                    http.get(url, function(response) {
                        tmp.on('finish', function() {
                            tmp.close(function() {
                                decodeBarcode(res, license, tmpFileName, barcodeType);

Read Barcode Images in Node.js

function decodeBarcode(res, license, fileName, barcodeType) {
    // read barcode using dbr
        license, fileName, barcodeType,
        function(msg) {
            var response = 'Totol count: ' + msg.length;
            var result = null;
            for (index in msg) {
                result = msg[index]
                response += '<p>' + result['format'] + ': ';
                response += result['value'] + '<p>';

Test Online Barcode Reader

Run server.js:

node server.js

Visit http://localhost:2016/index.htm:

node barcode reader

Source Code