想要将我的网络应用转换为具有数据持久性的桌面应用

时间:2017-03-07 07:47:15

标签: mysql node.js node-webkit nwjs

我创建了一个payroll webapp并使用了mysql和node js来构建它。 问题是我不知道如何将其转换为桌面webapp。 我已经使用了node-mysql模块,所以我现在需要更改一些东西 或者只是使用node webkit转换它?

这是如何工作的,真的吗?

这是我的server.js现在的样子。那么,我是否需要再次对代码进行任何更改?

var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var app = express();
var mysql = require('mysql');
//var ejsLint=require('./server.js');
//ejsLint.lint('attendance-data.ejs', '-p');
var connection = mysql.createConnection({
    host:'localhost',
    user:'root',
    password:'',
    database:'employees',
    multipleStatements:true
});

app.set('view engine','ejs');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.get('/', function (req,res){
    res.render('index');
});
var daValue=227.30;
app.get('/da',function(req,res){
    res.render('da');
});
app.post('/da-data',function(req,res){
    daValue = Number(req.body.da);
        var data = {da :daValue};
           console.log('da is :',daValue);

    res.render('da-data.ejs',data);
});

app.get('/add-employee',function(req,res){
    res.render('add-employee');
});

app.post('/add-employee',function(req,res){
    res.status(200).send();
    console.log('employee '+req.body.name + ' added');
});

connection.connect(function(err){
    if(err){
        console.log('Error connecting to Db');
        return;
    }
    console.log('Connection established');
});

app.post('/form',function (req,res){
    //employee details from add-employee.html page
var name=req.body.name;
var designation = req.body.designation;
var pan = req.body.pan;
var aadhar = req.body.aadhar;
var bank = req.body.bank;
var basicSalary = req.body.salary;
var allowance = req.body.allowance;
var grossSalary = req.body.salarygross;
var esi = req.body.esi;
var uan = req.body.uan;


var details = {name:name,designation:designation,pan:pan,aadhar:aadhar,
    bank:bank,basic_salary:basicSalary,other_allowances:allowance,gross_salary:grossSalary,esi:esi,uan:uan};
    // for sending data as objects into database
    // use {name of database column : name of the variable where it's value is stored}
    // example {wages_rate is the name of database column : wagesRate is the variable where
        // value is stored}

var query = connection.query('INSERT INTO employee_details SET ?',details,function(err,result){
    if(err){
        console.log(err);
    }
    console.log(query.sql);
}); 

res.status(200).send('employee ' + name + 'with salary of '+salary+ ' added');

});

app.get('/show',function (req,res){
    connection.query('SELECT * FROM employee_details',function(err,rows){
  if(err) throw err;

  console.log('Data received');
  console.log(rows);
   var data ="Id "+"<strong>" +" name "+" designation "+" uan"+"</strong>";
  for(var i=0;i<rows.length;i++){
    data = data+"<br>" + (i+1)+". "+rows[i].name +" "+rows[i].designation+" "+rows[i].uan+"<br>";
  }

 res.send(data);
});
});

     var rowsLength;
     var salaryFromRow;
     var salaryArr=[];
     var allowanceFromRow;

     var allowanceArr=[];
     var designationArr=[];
app.get('/attendance',function (req,res){
    connection.query('SELECT * FROM employee_details',function(err,rows){
  if(err) {
    throw err;
   }else{
      rowsLength = rows.length;

     for(var i=0;i<rowsLength;i++){
        salaryFromRow = rows[i].salary;
        salaryArr.push(salaryFromRow);
        allowanceFromRow = rows[i].allowance;
        allowanceArr.push(allowanceFromRow);
        designationArr.push(rows[i].designation);
        console.log('designation is ',designationArr);
     }





    res.render('attendance',{rows:rows});
   }


});
});


app.post('/attendance-data',function(req,res){
    var uanFromHtml;

    var nameFromHtml;

    var  daysPresent;
    var attendance;
    var nameForm;
    var designation;
    var monthFromHTML;
    var t;
    var realBasicSalary;
    var realOtherAllowances;
    var realGrossSalary;
    var pfBasic;
    var esiGross;
    var pTax=0;
    var netAmount;
    var advance=0;
    var finalData = [];
    for(var i=1;i<=rowsLength;i++){
        var dataArr = [];
        var finalTable = [];

        attendance = "attendance"+i;
        t=i-1;
        salaryForPerson = salaryArr[i];
        allowanceForPerson = allowanceArr[i];
        console.log('req.body is ', req.body);


        daysPresent = Number(req.body[attendance]);
        nameFromHtml = req.body.name[t];
        var nameArr = req.body.name;
        uanFromHtml = req.body.uan[t];
        monthFromHTML = req.body.monthyear;

        var uanArr = req.body.uan;
        realBasicSalary = Math.ceil((req.body.basicsalary[t])*(daysPresent/30)) ;
        realOtherAllowances = Math.ceil((req.body.otherallowance[t])*(daysPresent/30));
        realGrossSalary = Math.ceil((req.body.grosssalary[t])*(daysPresent/30));
            console.log('realBasicSalary is '+realBasicSalary+' and realGrossSalary is  '+realGrossSalary+' and realOtherAllowances is '+ realOtherAllowances);
        pfBasic = Math.ceil((12/100)*realBasicSalary);
        esiGross = Math.ceil((1.75/100)*realGrossSalary);

        if(realBasicSalary>10000 && realBasicSalary<=15000){
            pTax = 110;
        }else if(realBasicSalary>=15001 && realBasicSalary<=25000){
            pTax = 130;
        }else if(realBasicSalary>=25001 && realBasicSalary<=40000){
            pTax = 150;
        }else if(realBasicSalary>=40001){
            pTax = 200;
        }
            netAmount = realGrossSalary - (pTax + pfBasic + esiGross + advance);

        console.log('realGrossSalary is '+realGrossSalary + ' and realBasicSalary is '+realBasicSalary+
            'pTax is '+ pTax+ 'pfBasic is '+pfBasic +'esiGross is '+esiGross);

        console.log('namefromhtml is : ', nameFromHtml);
        console.log('attendance is :',attendance);
        console.log('days present is :',daysPresent);
        console.log('monthyear is : ',monthFromHTML);
        dataArr.push(monthFromHTML,uanFromHtml,nameFromHtml,daysPresent,realBasicSalary,realOtherAllowances,realGrossSalary,pTax);

        finalData.push(dataArr);
    /*  uanArr.push(uanFromHtml);
        nameArr.push(nameFromHtml);
        daysArray.push(daysPresent);
        */

        console.log('dataArr is : ',dataArr);
        console.log('finalData is  : ',finalData);

    }
        var attendanceData = {monthyear :monthFromHTML,rows:rowsLength,uanarr:uanArr,designationarr:designationArr,
        namearr:nameArr,finaldata:finalData,realbasicsalary:realBasicSalary,realgrosssalary:realGrossSalary,ptax:pTax,advance:advance};

    connection.query("INSERT INTO attendance_details(month_year,uan,name,days_present,real_basic_salary,other_allowances,gross_salary,ptax) VALUES ?", 
        [finalData], function(err) {
    if (err){
     var errors = err;
     console.log(errors);
     res.send(errors);
 }else{


    //put database query for inserting values here
    res.render('attendance-data.ejs', attendanceData);
 }

});

});

/*
app.get('/final',function(req,res){
    connection.query('SELECT name,designation,salary,wages_rate FROM employee_details;SELECT uan,da,days_present,total_wages FROM attendance_details;',function(err,rows){
    if(err){
        console.error('MySQL — Error connecting: ' + err.stack);
    }else{
        var rowsNumber = rows.length;
      console.log('rows is :',rows);
    var nameFinal;
    var designationFinal;
    var salaryFinal;
    var wagesrateFinal;
    var uanFinal;
    var daFinal;
    var daysFinal;
    var totalwagesFinal;
    var nameFinalarr = [];
    var designationFinalarr =[];
    var salaryFinalarr = [];
    var wagesrateFinalarr =[];
    var uanFinalarr =[];
    var daFinalarr =[];
    var daysFinalarr = [];
    var totalwagesFinalarr =[];



    for(var i=0;i<rowsNumber;i++){
        nameFinalarr.push(rows[i].name);
        designationFinalarr.push(rows[i].designation);
        salaryFinalarr.push(rows[i].salary);
        wagesrateFinalarr.push(rows[i].wages_rate);
        uanFinalarr.push(rows[i].uan);
        daysFinalarr.push(rows[i].da);
        daysFinalarr.push(rows[i].days_present);
        totalwagesFinalarr.push(rows[i].total_wages);

    }
        console.log('nameFinalarr is :', nameFinalarr);
        console.log('daysFinalarr is :', daysFinalarr);
    }

    res.render('final',{rows:rowsNumber,name:nameFinal,designation:designationFinal,salary:salaryFinal,wagesrate:wagesrateFinal,uan:uanFinal,da:daFinal,
        days:daysFinal,
        totalwages:totalwagesFinal});
  });

});
*/

app.get('/select-month',function(req,res){
    connection.query('SELECT month_year,name FROM attendance_details',function(err,rows){
        if(err){
            throw err;
        }else{

            var rowsLength = rows.length;
            console.log('rows is ',rows);

            res.render('select-month.ejs',{rows:rows});
        }
    });


});

app.get('/salary-sheet',function(req,res){
    var month = req.query.selectpicker;
    var employeeName = req.query.selectpicker2;
    console.log('employeeName is ',employeeName);
    connection.query('SELECT * FROM attendance_details WHERE month_year='+"'"+month+"' AND name='"+employeeName+"'",function(err,rows){
        if(err){
            throw err;
        }else{
            var rowsLength = rows.length;
            console.log('rows is ',rows);
            var uanarr=[];
            var namearr=[];
            var daysarr=[];
            var realBasicSalaryarr=[];
            var realOtherAllowancesarr=[];
            var grossSalaryarr=[];
            var ptaxarr=[];
            var advance=0;
            for(var i=0;i<rowsLength;i++){
                uanarr.push(rows[i].uan);
                namearr.push(rows[i].name);
                daysarr.push(rows[i].days_present);
                realBasicSalaryarr.push(rows[i].real_basic_salary);
                realOtherAllowancesarr.push(rows[i].other_allowances);
                grossSalaryarr.push(rows[i].gross_salary);
                ptaxarr.push(rows[i].ptax);

            }
            console.log('realBasicSalaryarr is ',realBasicSalaryarr);
            console.log('namearr is ',namearr);
            res.render('salary-sheet.ejs',{advance:advance,rows:rows,monthyear:month,uanarr:uanarr,namearr:namearr,daysarr:daysarr,basicsalaryarr:realBasicSalaryarr,
                realotherallowancesarr:realOtherAllowancesarr,realgrosssalaryarr:grossSalaryarr,ptaxarr:ptaxarr});
        }
    });


});



app.get('/add-company',function(req,res){
     res.render('add-company.ejs');
});

app.get('/style.css',function(req,res){
    res.sendFile(path.join(__dirname,'/style.css'));
});

app.get('/main.js',function(req,res){
    res.sendFile(path.join(__dirname,'/main.js'));
});

app.get('/cmain.js',function(req,res){
    res.sendFile(path.join(__dirname,'/cmain.js'));
});

var port=8080;
app.listen(8080,function(req,res){
   console.log(`Payroll app listening on port ${port}!` );
});

您能告诉我如何将其转换为桌面应用吗?

2 个答案:

答案 0 :(得分:0)

为了使这项工作脱机,换句话说,独立,您需要重新审视有关持久性的方法。 MySQL不是我试图与应用程序捆绑的东西。理想情况下,您可以使用Yonghoon Lee建议的链接,因为您需要应用程序才能拥有嵌入式数据库而不是外部数据库。

我已经成功做了类似的事情,虽然切换到IndexDB意味着我必须重写我的所有查询,因为它是NoSQL数据库。请拒绝使用Web SQL数据库,它不是标准的,可能随时消失。

除此之外,我没有看到任何转换为​​NWJS应用程序的明显问题。您可以参考the official documentation了解如何入门的一些示例。

答案 1 :(得分:0)

它不容易移植。您不应该期望stackoverflow上的人员为您完成所有工作。这不是一项简单的任务,但我会尽力引导你。

1。)了解NWJS是什么。 NWJS不仅仅是一个node.js服务器,也是一个客户端。这意味着您可以使用node.js的代码和在客户端上运行的javascript代码。

2。)您不需要服务器js。您的应用程序的入口点不是服务器js文件,而是index.html文件。

3.。)你应该将js代码添加到索引html的标记中。她可以使用您要运行的代码创建一个main.js文件,并将其添加为脚本标记。

4.。)使用npm install mysql --save将mysql安装到您的nwjs包中 您必须在包含package.json

的文件夹中运行此命令

5.如果你想使用路线,你必须安装express.js 路由将是您计算机上的localhost路由

现在你必须考虑你真正想做的事情?从哪里可以获得路线?您是否想要一个应用程序,您可以在其中单击按钮,然后将数据提供给mysql数据库?

如果您真的有兴趣将它移植到nwjs,您必须了解nwjs的工作原理。我给了你第一步,但没有进一步的信息,我不能给你更多的建议。

祝你好运。祝你好运。如果您了解nwjs的结构,将很容易移植它;)