【nodejs】修改了下对股票表进行crud操作的代码
表是这样的:
id是自增长字段,code和name都是255位的varchar。
下面是主角app.js的代码:
'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("\n list all stocks"); pool.getConnection(function(err,connection){ if(err){ res.send('Can not connect to MySql DB'); console.log(err); }else{ connection.query("select * from stock ",function(err,result){ if(err){ console.log('List failed'); console.log(err); }else{ console.log("List succeed"); 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); } res.send(JSON.stringify(arr)); } connection.release(); }) } }); }); }); // 添加一个股票 app.put('/add.html',function(req,res){ req.on('data',function(data){ var obj=JSON.parse(data.toString());// 取得Ajax提交的参数 console.log("\n add stock name="+obj.name+" code="+obj.code); 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'; console.log(err); }else{ str="Insert succeed"; res.send(str); } console.log(str); connection.release(); }) } }); }); }); // 按ID删除一个股票 app.put('/del.html',function(req,res){ req.on('data',function(data){ var obj=JSON.parse(data.toString());// 取得Ajax提交的参数 console.log("\n delete stock id="+obj.id); 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'; console.log(err); }else{ str="delete succeed"; var info={'status':'ok','id':obj.id} res.send(JSON.stringify(info)); } console.log(str); connection.release(); }) } }); }); }); // 按ID取出一个股票 app.put('/fetchone.html',function(req,res){ req.on('data',function(data){ var obj=JSON.parse(data.toString());// 取得Ajax提交的参数 console.log("\n fetchone id="+obj.id); 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'; console.log(err); }else{ str="fetchone succeed"; 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); } res.send(JSON.stringify(arr)); } console.log(str); connection.release(); }) } }); }); }); // 更改一个股票 app.put('/modify.html',function(req,res){ req.on('data',function(data){ var obj=JSON.parse(data.toString());// 取得Ajax提交的参数 console.log("\n modify stock id="+obj.id+" new code="+obj.code+" new name="+obj.name); 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"; var info={'status':'ok','id':obj.id} res.send(JSON.stringify(info)); } console.log(str); connection.release(); }) } }); }); }); app.listen(8080,"127.0.0.1");
index页面进入时是这样的:
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是这样的:
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>
添加页面add.html是这样的:
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>
好了,crud代码就到这里了。
2018年4月10日完成 2018年4月11日修改
【nodejs】修改了下对股票表进行crud操作的代码的更多相关文章
- 【Java EE 学习 44】【Hibernate学习第一天】【Hibernate对单表的CRUD操作】
一.Hibernate简介 1.hibernate是对jdbc的二次开发 2.jdbc没有缓存机制,但是hibernate有. 3.hibernate的有点和缺点 (1)优点:有缓存,而且是二级缓存: ...
- Oracle触发器实现监控某表的CRUD操作
前提:请用sys用户dba权限登录 1.创建一个表来存储操作日志 create table trig_sql( LT DATE not null primary key, SID NUMBER, SE ...
- SpringMVC案例1——对User表进行CRUD操作
------------------------------------------------------------------web.xml--------------------------- ...
- 【Java框架型项目从入门到装逼】第九节 - 数据库建表和CRUD操作
1.新建学生表 这节课我们来把和数据库以及jdbc相关的内容完成,首先,进行数据库建表.数据库呢,我们采用MySQL数据库,我们可以通过navcat之类的管理工具来轻松建表. 首先,我们得建一个数据库 ...
- 6.单表的CRUD操作
1.插入后用新id初始化被插入对象 <insert id="insertStudentCatchId"> insert into student (age,name,s ...
- jdbc笔记(二) 使用PreparedStatement对单表的CRUD操作
首先声明,本文只给出代码,并不是做教程用,如有不便之处,还请各位见谅. PreparedStatement相较于Statement,概括来说,共有三个优势: 1. 代码的可读性和易维护性:Prepar ...
- jdbc笔记(一) 使用Statement对单表的CRUD操作
jdbc连接mysql并执行简单的CRUD的步骤: 1.注册驱动(需要抛出/捕获异常) Class.forName("com.mysql.jdbc.Driver"); 2.建立连接 ...
- mysql5.7 mysql库下面的user表没有password字段无法修改密码
如题所述,mysql5.7 mysql库下面的user表没有password字段无法修改密码, 5.7版本已经不再使用password来作为密码的字段了 而改成了authentication_st ...
- WinCE下读取注册表获得SD路径
WinCE下读取注册表获得SD路径 [要点]WinCE注册表中[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SDMemory\] 下键Folde ...
随机推荐
- [Luogu4724][模板]三维凸包(增量构造法)
1.向量点积同二维,x1y1+x2y2+x3y3.向量叉积是行列式形式,(y1z2-z1y2,z1x2-x1z2,x1y2-y1x2). 2.增量构造法: 1)首先定义,一个平面由三个点唯一确定.一个 ...
- BZOJ.2916.[POI1997]Monochromatic Triangles(三元环)
题目链接 \(Description\) n个点的完全图,其中有m条边用红边相连,其余边为蓝色.求其中三边同色的三角形个数. \(Solution\) 直接求同色 除了n^3 不会.. 三角形总数是C ...
- 某谷 P5159 WD与矩阵
题面在这里 崴脚回家后的小休闲2333. 显然每一行的1的个数必须是偶数,这样可以归纳证明前i行异或出来的m位二进制数也有偶数个1,这样最后一行就有且仅有一种放法了. 于是ans = 2^((n-1) ...
- python编程之socket编程基础
python socket编程,首先需要import socket模块 首先创建一个socket对象 expl = socket.socket(socket.AF_INET,socket.SOCK ...
- Opencv配套的辅助工具Image Watch
1.Image Watch 的下载链接. 2.OpenCV关于Image Watch的介绍页面链接. 3.OpenCV2.4 在线文档关于Image Watch的介绍文档. 4.更详细的信息参见I ...
- 说说最小生成树(Minimum Spanning Tree)
minimum spanning tree(MST) 最小生成树是连通无向带权图的一个子图,要求 能够连接图中的所有顶点.无环.路径的权重和为所有路径中最小的. graph-cut 对图的一个切割或者 ...
- javascript小记-作用域
一.全局作用域 全局作用域的变量不论在什么时候都可以直接引用,而不必通过全局对象:满足以下条件的变量属于全局作用域:1.在最外层定义的变量2.全局对象的属性3.任何地方隐式定义的变量(未定义直接赋值的 ...
- Linux下环境变量设置技巧,不用/etc/profile而是在/etc/profile.d目录下新建特定的shell文件来设置
区别: 1.两个文件都是设置环境变量文件的,/etc/profile是永久性的环境变量,是全局变量,/etc/profile.d/设置所有用户生效,同样是永久变量,是全局变量. 2./etc/prof ...
- SET XACT_ABORT ON 数据库事务
转载:http://www.cnblogs.com/rob0121/articles/2320932.html SET XACT_ABORT ON SET XACT_ABORT ON分为两种: 1.总 ...
- 【原】移动web资源整理(安卓、ios移动端兼容性问题归整)
meta基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=device-wi ...