感觉crud是高级形式的hello world了。

app代码:

'use strict';

var express=require('express');
var http=require('http');
var fs=require('fs');

var app=express();

var mysql=require('mysql');
var pool=mysql.createPool({
    host:'127.0.0.1',
    port:'3306',
    database:'test',
    user:'root',
    password:'12345678',
});

app.get('/index.html',function(req,rsp){
    rsp.sendFile(__dirname+'/index.html');
});

app.get('/add.html',function(req,rsp){
    rsp.sendFile(__dirname+'/add.html');
});

app.get('/modify.html/:id',function(req,rsp){
    rsp.sendFile(__dirname+'/modify.html');
});

app.put('/list.html',function(req,res){
    req.on('data',function(data){
        //var obj=JSON.parse(data.toString());// 取得Ajax提交的参数
        console.log("list");

        pool.getConnection(function(err,connection){
            if(err){
                res.send('Can not connect to MySql DB');
                console.log(err);
            }else{

                var str;
                connection.query("select * from stock ",function(err,result){
                    if(err){
                        str='List failed';
                    }else{
                        str="List succeed";
                    }
                    console.log(str);
                    console.log("result.length="+result.length);

                    var arr=[];
                    for (var i=0; i<result.length; i++) {
                        var tmp = result[i];

                        var stock=new Object;
                        stock.id=tmp['Id'];
                        stock.name=tmp['name'];
                        stock.code=tmp['code'];

                        arr.push(stock);
                    } 

                    connection.release();
                    res.send(JSON.stringify(arr));
                })
            }
        });
    });
});

app.put('/add.html',function(req,res){
    req.on('data',function(data){
        var obj=JSON.parse(data.toString());// 取得Ajax提交的参数
        console.log("add "+obj);

        pool.getConnection(function(err,connection){
            if(err){
                res.send('Can not connect to MySql DB');
                console.log(err);
            }else{
                var str;
                connection.query('insert into stock set ?',{name:obj.name,code:obj.code},function(err,result){
                    if(err){
                        str='Insert failed';
                    }else{
                        str="Insert succeed";
                    }
                    console.log(str);

                    connection.release();
                    res.send(str);
                })
            }
        });
    });
});

app.put('/del.html',function(req,res){
    req.on('data',function(data){
        var obj=JSON.parse(data.toString());// 取得Ajax提交的参数
        console.log("delete "+obj);

        pool.getConnection(function(err,connection){
            if(err){
                res.send('Can not connect to MySql DB');
                console.log(err);
            }else{
                var str;
                connection.query('delete from stock where ? ',{id:obj.id},function(err,result){
                    if(err){
                        str='delete failed';
                    }else{
                        str="delete succeed";
                    }
                    console.log(str);

                    connection.release();

                    var info={'status':'ok','id':obj.id}

                    res.send(JSON.stringify(info));
                })
            }
        });
    });
});

app.put('/fetchone.html',function(req,res){
    req.on('data',function(data){
        var obj=JSON.parse(data.toString());// 取得Ajax提交的参数
        console.log("fetchone");

        pool.getConnection(function(err,connection){
            if(err){
                res.send('Can not connect to MySql DB');
                console.log(err);
            }else{

                var str;
                connection.query("select * from stock where ?",{id:obj.id},function(err,result){
                    if(err){
                        str='fetchone failed';
                    }else{
                        str="fetchone succeed";
                    }
                    console.log(str);
                    console.log("result.length="+result.length);

                    var arr=[];
                    for (var i=0; i<result.length; i++) {
                        var tmp = result[i];

                        var stock=new Object;
                        stock.id=tmp['Id'];
                        stock.name=tmp['name'];
                        stock.code=tmp['code'];

                        arr.push(stock);
                    } 

                    connection.release();
                    res.send(JSON.stringify(arr));
                })
            }
        });
    });
});

app.put('/modify.html',function(req,res){
    req.on('data',function(data){
        var obj=JSON.parse(data.toString());// 取得Ajax提交的参数
        console.log("modify "+obj);

        pool.getConnection(function(err,connection){
            if(err){
                res.send('Can not connect to MySql DB');
                console.log(err);
            }else{
                var str;
                connection.query('update stock set code=?,name=? where id=? ',[obj.code,obj.name,obj.id],function(err,result){
                    if(err){
                        str='modify failed';
                        console.log(err);
                    }else{
                        str="modify succeed";
                    }
                    console.log(str);

                    connection.release();

                    var info={'status':'ok','id':obj.id}

                    res.send(JSON.stringify(info));
                })
            }
        });
    });
});

app.listen(8080,"127.0.0.1");

添加页面add.html:

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 <head>
  <title>add data from db</title>
 </head>

 <body >
    <h3>添加股票</h3>
  <form id="form1">
    股票代号:<input type="text" id="scode" value=""><br/>
    股票名称:<input type="text" id="sname" value=""><br/>
    <input type="button" value="提交" onclick="addStock();"/>
  </form>
 </body>
</html>
<script type="text/javascript">
<!--
function addStock(){

    var obj={
        name:document.getElementById("sname").value,
        code:document.getElementById("scode").value
    };

    var xhr=new XMLHttpRequest();
    xhr.open('put','add.html',true);

    xhr.onload=function(e){
        if(this.status==200){
            //alert(this.response);
            var retval=this.response.toString();

            if(retval=='Insert succeed'){
                alert('插入成功,将转入列表页');
                window.location="/index.html";
            }

        }
    };

    xhr.send(JSON.stringify(obj));
}

function gotoAddPage(){
    window.location="/add.html"
}

//-->
</script>

列表页面index.html:

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 <head>
  <title>get data from db</title>
 </head>

 <body onload="getAllStocks()">
  <table border="1">
    <caption>全体股票列表</caption>
    <tr>
        <th>id</th><th>code</th><th>name</th><th>删除</th><th>修改</th>
    </tr>
    <tbody id="mytable">
    </tbody>
  </table>
  <br>

  <a href="javascript:gotoAddPage();">添加</a>
 </body>
</html>
<script type="text/javascript">
<!--
function getAllStocks(){
    var obj={
        name:"none",
    };

    var xhr=new XMLHttpRequest();
    xhr.open('put','list.html',true);

    xhr.onload=function(e){
        if(this.status==200){
            var arr=JSON.parse(this.response);
            updateTable(arr);
        }
    };

    xhr.send(JSON.stringify(obj));
}

function updateTable(arr){
    var table=document.getElementById("mytable");

    for(var i=table.childNodes.length-1;i>=0;i--){
        table.removeChild(table.childNodes[i]);
    }

    for(var i=0;i<arr.length;i++){
        var emp=arr[i];

        var tr=document.createElement("tr");
        tr.setAttribute('id',emp.id);

        var td1=document.createElement("td");
        td1.appendChild(document.createTextNode(emp.id));
        tr.appendChild(td1);

        var td2=document.createElement("td");
        td2.appendChild(document.createTextNode(emp.code));
        tr.appendChild(td2);

        var td3=document.createElement("td");
        td3.appendChild(document.createTextNode(emp.name));
        tr.appendChild(td3);

        var td4=document.createElement("td");
        var a1=document.createElement("a");
        a1.appendChild(document.createTextNode(emp.id));
        a1.setAttribute('href','javascript:deleteStock('+emp.id+')');
        td4.appendChild(a1);
        tr.appendChild(td4);

        var td5=document.createElement("td");
        var a2=document.createElement("a");
        a2.appendChild(document.createTextNode(emp.id));
        a2.setAttribute('href','javascript:goModify('+emp.id+')');
        td5.appendChild(a2);
        tr.appendChild(td5);

        table.appendChild(tr);
    }
}

function gotoAddPage(){
    window.location="/add.html"
}

function deleteStock(id){
    //alert(id);

    var obj={
        id:id,
    };

    var xhr=new XMLHttpRequest();
    xhr.open('put','del.html',true);

    xhr.onload=function(e){
        if(this.status==200){
            var info=JSON.parse(this.response);

            if(info.status=='ok'){
                alert('删除成功');
                tr=document.getElementById(info.id);
                tr.parentNode.removeChild(tr);
            }
        }
    };

    xhr.send(JSON.stringify(obj));
}

function goModify(id){
    window.location="/modify.html/"+id;
}

//-->
</script>

修改页面modify.html

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 <head>
  <title>modify data from db</title>
 </head>

 <body onload="fetchStock();">
    <h3>修改股票</h3>
  <form id="form1">
    股票Id:<input type="text" id="sid" value="" readonly><br/>
    股票代号:<input type="text" id="scode" value=""><br/>
    股票名称:<input type="text" id="sname" value=""><br/>
    <input type="button" value="提交" onclick="modifyStock();"/>
  </form>
 </body>
</html>
<script type="text/javascript">
<!--
function fetchStock(){
    var url=window.location.href.toString();
    var pos=url.lastIndexOf("/");// 找最后一个斜杠位置
    var id=url.slice(pos+1);

    var obj={
        id:id
    };

    var xhr=new XMLHttpRequest();
    xhr.open('put','http://localhost:8080/fetchone.html',true);// 注意地址的写法

    xhr.onload=function(e){
        if(this.status==200){
            var arr=JSON.parse(this.response);
            var stock=arr[0];

            document.getElementById('sid').value=stock.id;
            document.getElementById('scode').value=stock.code;
            document.getElementById('sname').value=stock.name;
        }
    };

    xhr.send(JSON.stringify(obj));
}

function modifyStock(){

    var obj={
        id:document.getElementById("sid").value,
        name:document.getElementById("sname").value,
        code:document.getElementById("scode").value
    };

    var xhr=new XMLHttpRequest();
    xhr.open('put','http://localhost:8080/modify.html',true);

    xhr.onload=function(e){
        if(this.status==200){
            var info=JSON.parse(this.response);

            if(info.status=='ok'){
                alert('修改成功');
                window.location="/index.html";
            }

        }
    };

    xhr.send(JSON.stringify(obj));
}

//-->
</script>

【nodejs】用express又做了份crud的更多相关文章

  1. [转] NodeJS框架express的途径映射(路由)功能及控制

    NodeJS框架express的路径映射(路由)功能及控制 我们知道Express是一个基于NodeJS的非常优秀的服务端开发框架,本篇CSSer将提供express框架的route和route co ...

  2. 阿里云主机Nginx下配置NodeJS、Express和Forever

    https://cnodejs.org/topic/5059ce39fd37ea6b2f07e1a3 AngularJS中文社区即运行在阿里云主机上,本站使用Nginx引擎,为了AngularJS,我 ...

  3. socket.io+angular.js+express.js做个聊天应用(三)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/www19940501a/article/details/27590611 接着前面博客文章socke ...

  4. NodeJS旅程 : express - nodejs MVC 中的王牌

    express 正如ASP.NET MVC 在作为.net平台下最佳的 Mvc框架的地位一样,express在 node.js 环境也有着相同的重要性.在百度上 "nodejs expres ...

  5. NodeJS什么都能做,为什么还要JAVA?

    这张图看起来简单而且很好理解,但没尝试过,会有很多疑问. SPA模式中,后端已供了所需的数据接口,view前端已经可以控制,为什么要多加NodeJS这一层? 多加一层,性能怎么样? 多加一层,前端的工 ...

  6. nodejs库express是如何接收inbound json请求的

    这样几行简单的代码创建一个web服务器: var express = require('express'); var app = express(); var server = require('ht ...

  7. 使用nodejs和express搭建http web服务

    目录 简介 使用nodejs搭建HTTP web服务 请求nodejs服务 第三方lib请求post 获取http请求的正文 Express和使用express搭建http web服务 express ...

  8. 【NodeJS】---express配置ejs mongoose route等

    express创建项目 命令行下: express prj_name cd prj_name && npm install ejs html var ejs = require('ej ...

  9. NodeJS 框架 Express 从 3.0升级至4.0的新特性

    NodeJS 框架 Express 从 3.0升级至4.0的新特性 [原文地址:√https://scotch.io/bar-talk/expressjs-4-0-new-features-and-u ...

随机推荐

  1. Hihocoder #1082 : 然而沼跃鱼早就看穿了一切 暴力

    时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼(“marshtomp”,不区 ...

  2. .NET面试宝典-高级2

    http://blog.csdn.net/shanyongxu/article/category/6023593 对于 Web 性能优化,您有哪些了解和经验吗? 1.前端优化 (1)减少 HTTP 请 ...

  3. django源码(2.0.2)粗解之命令行执行

    前言 django的命令行在整个的django web开发中都会经常用到,而且是必须得用到.所以,能够了解下django的命令行实现其实是非常有帮助的. 如果大家比较关心django命令的详细说明和使 ...

  4. Flex父子窗体相互调用

    Flex父子窗体相互调用 1.设计思路 (1)子窗体调用父窗体的方法 (2)子窗体做了改动后,返回父窗体,父窗体调用子窗体函数 2.设计源代码 (1)父窗体 ParentWindow.mxml: &l ...

  5. Tasker to detect and vibrate once the ougoing call is being answered

    I happen to find that for GSM standard phone, call duration would be created into sql database only ...

  6. 关于OPC Client 编写2

    最近在搞到一个OPC动态库OPCAutomation.dll,该动态库在http://www.kepware.com/可下载,下面介绍如何用C#进行OPC Client开发. 1.新建C#应用程序,命 ...

  7. arcgis新版本增加的功能

    1.导出拓扑错误 2.应用图层的符号设置 3.创建 SQLite 数据库 4.最小包围体 5.图形缓冲 6.按属性分割

  8. 演示Microsoft Advertising SDK for Windows Phone 8.1

    演示Microsoft Advertising SDK for Windows Phone 8.1,Only for Windows Phone 8.1 1.在References上点右键,添加引用, ...

  9. easyui 排序实现

    1.对easyui  datagrid 返回的数据,进行排序处理,便于搜索到我们的有用的信息. 例如: 2.datagrid 需要设置 sortable : true { field : 'crtTi ...

  10. html5-语义化标签(一)

    1.什么是语义化标签? 根据内容的结构化(内容化),选择合适标签 2.为什么要语义化 为了在没有css样式的情况下,页面也能很好的呈现出很好的内容结构.代码结构 方便其他设备的解析(屏幕阅读器.盲人阅 ...