【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 ...
随机推荐
- codevs 5790 素数序数
5790 素数序数(筛素数版) 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 给定一个整数n,保证n为正整数且在int范 ...
- Python知识(1)----基础入门和进阶总结。
今天把Python的语法过了一遍,学习了慕课网上的教程,简单易懂,1个小时就可以入门Python了.Python有两个主要的版本,Python2.7,Python3.5,后面的版本,改动较大,编写的程 ...
- PowerDesigner导出图片
但是通过上面导出的图片会比较模糊不清晰,但是可以通过这样解决: 1.放大设计,然后全选复制全部 2.打开画图工具 3.粘贴到画图工具
- STM32 100 pin 多个外设译码方案 - SN74LVC1G29
http://www.ti.com/lit/ds/symlink/sn74lvc1g29.pdf
- C# 标签(条码)的打印与设计(二)
上一篇说到条码的打印,主要是通过读取模板定义文件(XML文件),然后结合从数据库中读取的动态数据结合而产生条码.下面主要说一下如何设计这个条码模板.设计过程也很简单,只需要简单的拖拉即可.然后点击小箭 ...
- VS2010 打包生成exe文件后 执行安装文件出现 TODO:<文件说明>已停止工作并已关闭
一.VS2010 打包生成exe文件后 执行安装文件出现 TODO:<文件说明>已停止工作并已关闭 TODO: <文件说明>已停止工作 原因: 打包的时候在文件系统中建立了 ...
- linux内核数据包转发流程(一):网络设备驱动
[版权声明:转载请保留出处:blog.csdn.net/gentleliu.邮箱:shallnew*163.com] 网卡驱动为每一个新的接口在一个全局的网络设备列表里插入一个数据结构.每一个接口由一 ...
- Ubuntu 查看本机的ip
打开终端中执行:ifconfig -a命令即可,如下图所示白色背景信息即是. 说明: enp0s3 表示第一块网卡, 其中 HWaddr 表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址 ...
- maven项目如何生成war文件
配置 你的pom.xml文件,在你的overview视窗里 配置 packaging为 war 然后然后点击 pom.xml右键,run as 选择 install 或是 package如果项目没问题 ...
- 如何停止一个正在运行的java线程
与此问题相关的内容主要涉及三部分:已废弃的Thread.stop().迷惑的thread.interrupt系列.最佳实践Shared Variable. 已废弃的Thread.stop() @Dep ...