Icontem

File: examplen.js

Recommend this page to a friend!
  Classes of Vallo Reima  >  JS Merge XML  >  examplen.js  >  Download  
File: examplen.js
Role: Example script
Content type: text/plain
Description: Example script
Class: JS Merge XML
Merge XML documents from strings or DOM objects
Author: By
Last change: Update examplen.js
Date: 1 month ago
Size: 2,287 bytes
 

Contents

Class file image Download
/**
 * JS MergeXML NodeJS usage sample
 * server-side component
 *
 * @package     MergeXML
 * @author      Vallo Reima
 * @copyright   (C)2019
 */

const http = require('http');
const fs = require('fs'); //read/remove uploaded files
const formidable = require('formidable'); //to process the uploads

const MergeXML = require('./mergexml.js'); //loading the class
/* const oMX = new (require('./mergexml.js'))(); //load and instantiate */

const hostname = '127.0.0.1';
const port = 3000;
const template = 'examplen.htm';

const server = http.createServer((req, res) => {
  if (req.method === 'POST') { //merge uploaded
    let form = new formidable.IncomingForm();
    form.multiples = true; //multi-selected files
    form.parse(req, (err, fields, files) => { //process form data
      let f = Object.keys(files)[0]; //1st property is files[]
      let dat = Merge(files[f]);
      Respond(res, dat); //display result
    });
  } else if (req.url === '/') {
    fs.readFile(template, (err, data) => {  //get template html
      if (!err && data) { //obtained
        let dat = data.toString().replace('%url%', `http://${hostname}:${port}`); //set action url
        Respond(res, dat, 'html'); //launch the page
      } else {
        Respond(res, `Cannot read '${template}'`);
      }
    });
  }
}).listen(port, hostname, () => {
  console.log(`NodeJS is running at http://${hostname}:${port}`);
});

/**
 * send response
 * @param {object} res
 * @param {string} type plain|html
 * @param {string} data
 */
const Respond = function (res, data, type = 'plain') {
  res.writeHead(200, {'Content-Type': `text/${type}`, 'Content-Length': data.length});
  res.write(data);
  res.end();
};

/**
 * merge uploaded files and remove
 * @param {array} files
 * @returns {string}
 */
const Merge = function (files) {
  let oMX = new MergeXML();
  /*  oMX.Init(); //using global instance */
  for (let i = 0; i < files.length; i++) {
    let dat = fs.readFileSync(files[i].path).toString();
    fs.unlinkSync(files[i].path);
    if (!oMX.AddSource(dat)) {
      break;
    }
  }
  var rlt;
  if (oMX.error.code !== '') {
    rlt = oMX.error.text; /* no DOM support */
  } else if (oMX.count < 2) {
    rlt = 'Minimum 2 files are required';
  } else {
    rlt = oMX.Get(1);
  }
  return rlt;
};