js:nodejs通过async异步提交事务数据
一,async异步编程
1,异步编程是指由于异步I/O等因素,无法同步获得执行结果时, 在回调函数中进行下一步操作的代码编写风格,常见的如setTimeout函数、ajax请求等等
waterfall函数 瀑布流
waterfall每个函数产生的值,都将传给下一个函数
2,事务
数据库事物(transaction)就是一组SQL语句,这组SQL语句是一个逻辑工作单元。我们可以认为事务就是一组不可
分割的SQL语句,在执行时,应该作为一个整体永久性地修改数据库的内容,或者作为一个整体取消对数据库的所有修改。
例:银行转帐:将钱从一个银行帐号转到另一个帐号中通常包含二个步骤:一条UPDATE语句负责从一个银行帐号的总额中减去一定的钱数,另外一条UPDATE语句负责向另外一个银行帐号中增加钱数,这两个减少和增加操作要么同时永久性地保存到数据库,要么全部取消――――否则就会有一部份钱丢失了。
二,
1,在网页中提交数据
Zxly.ejs
<script src="../js/jquery.min.js"></script><script type="text/javascript">var i=0;$(document).ready(function(){$("#send").click(function(){if(i==1){alert("请不要重复提交!")}else {i=1;var nc = $("#nc").val();var qq = $("#qq").val();var em = $("#em").val();var zt = $("#zt").val();var nr = $("#nr").val();$.get("../action/zxly.js", {nc: nc, qq: qq, em: em, zt: zt, nr: nr}, function (result) {console.log(result.args);if (result.args=="ok") {alert("留言成功!")}})}})})</script>
<div class="message-table"> <ul><li><span class="tab-tit">昵 称 :</span><span><input type="text" name="name" id="nc" placeholder="请输入昵称" autocomplete="off"></span><span class="tab-des">∗</span></li><li><span class="tab-tit">Q Q :</span><span><input type="text" name="qq" id="qq" placeholder="请输入QQ" autocomplete="off"></span></li><li><span class="tab-tit">E-mail :</span><span><input type="text" name="e-mail" id="em" placeholder="请输入E-mail" autocomplete="off"></span></li><li><span class="tab-tit">留言主题 :</span><span><input type="text" name="zt" id="zt" placeholder="请输入主题" autocomplete="off"></span><span class="tab-des">∗</span></li><li><span class="tab-tit">留言内容 :</span><span><textarea name="content" id="nr" class="" placeholder="请输入留言内容"></textarea></span><span class="tab-des">∗</span></li></ul><div class="table-btn"><input type="button" name="" value="发 表" class="send-btn" id="send"/><input type="reset" name="" value="重 置" class="reset-btn" id="reset" /></div></div>
2,在js中接收数据
/*** Created by dyb on 2018/1/4.*/ function zxly(router,db) {//调用函数接收数据router.get("/action/zxly.js?",function(req,res) {//获取数据库中的数据//req.query:获取URL的查询参数串var par=req.query;var nc=par.nc;var qq=par.qq;var em=par.em;var zt=par.zt;var nr=par.nr;var fsql = "insert into ly_zx(ly_name,ly_qq,ly_email)values(?,?,?)";var tsql = "insert into ly_nr(nr_zt,nr_ly,nr_id)values(?,?,?)";console.log(nc+" "+qq+" "+em+" "+zt+" "+nr);console.log(fsql+" "+tsql);var addfsql=[nc,qq,em];var addtsql=[zt,nr]; //调用外部函数将数据存入数据库db.waterfall(fsql,tsql,addfsql,addtsql,function(result){console.log(result);if(result!=null){res.send({"args":result});}});})}module.exports=zxly;
3,存入数据
db.js
Db.waterfall=function(fsql,tsql,addfsql,addtsql,fun){//从连接池获得连接pool.getConnection(function(err,connection){//开启事务connection.beginTransaction(function(err){if(err){throw err;}//async异步 waterfall函数 瀑布流 async.waterfall([function(callback){console.log(fsql);connection.query(fsql,addfsql,function(err,result){if(err){console.log("数据添加失败1:"+err);return}callback(null,result.insertId)})},function(id,callback){//var tsql="insert into ly_nr(nr_zt,nr_ly,nr_id)values("+zt+","+nr+""; addtsql.push(id);console.log(tsql);connection.query(tsql,addtsql,function(err,result){if(err){console.log("数据添加失败2:"+err);connection.rollback();}//提交数据 connection.commit();connection.release();callback(null,'ok')})}],function(err,result){fun(result)})})})}
4,配置路由
app.js
/*** Created by dyb on 2018/1/4.*/ var express = require('express'); var Db=require('./db/db.js'); var app = express(); var url= require("url"); app.set('view engine', 'ejs'); app.set('views', __dirname + '/views'); app.use(express.static( __dirname+"/public")); var router = express.Router();app.locals.basePath = "http://localhost:3001/";/*直接访问模版需要输入.ejs后辍*/ app.get('/ee/*', function(req, res,next){var pagePath= url.parse(req.url).pathname;if(pagePath.indexOf(".ejs")!=-1){pagePath=pagePath.substr(1);pagePath=pagePath.substr(0,pagePath.length-4);res.render(pagePath);}else {next();} });var scfk=require('./action/scfk.js'); var p =new scfk(router,Db);var zxly=require('./action/zxly.js'); var p =new zxly(router,Db);app.use("/",router); var server=app.listen(3001,function afterListen(){console.log("express running ...."); });
转载于:https://www.cnblogs.com/dybe/p/8227780.html
js:nodejs通过async异步提交事务数据相关推荐
- nodejs之async异步编程
2019独角兽企业重金招聘Python工程师标准>>> 1.什么是异步编程? 异步编程是指由于异步I/O等因素,无法同步获得执行结果时, 在回调函数中进行下一步操作的代码编写风格,常 ...
- html弹窗赋值给查询框,bootstrap模态框动态赋值, ajax异步请求数据后给id为queryInfo的模态框赋值并弹出模态框(JS)...
/查询单个 function query(id) { $.ajax({ url : "/small/productServlet", async : true, type : &q ...
- 掌握Node.js中的Async和Await
在本文中,你将学习如何使用Node.js中的async函数(async/await)来简化callback或Promise. 异步语言结构在其他语言中已经存在了,像c#的async/await.Kot ...
- node 创建静态web服务器(下)(处理异步获取数据的两种方式)
接上一章. 上一章我们说创建的静态web服务器只能识别html,css,js文件,功能较为单一,且图片格式为text/html,这是不合理的. 本章,我们将解决该问题. 这里,我们先准备好一个json ...
- json请求 post vue_Spring Boot+Vueaxios异步请求数据的12种操作(上篇)
Java大联盟 致力于最高效的Java学习 关注 Spring Boot + Vue 前后端分离最核心的操作就是通过异步请求完成数据同步,这其中又可以分为很多种不同的情况,比如是 GET 请求还是 ...
- python爬斗鱼直播官网,【爬虫】nodejs爬斗鱼直播间数据实战
前提 $ npm install --save $ node app 打开http://localhost:3030/index.html 可直接查看爬虫数据 目标 爬取斗鱼正在直播的主播数据(房间号 ...
- 前端面试题 HTML5 CSS3(盒子模型、盒子水平垂直居中、经典布局) JS(闭包、深浅克隆、数据劫持和拦截) 算法(排序、去重、数组扁平化) Vue(双向数据绑定原理、通信方式)
前端面试题 HTML5 相关面试题 CSS3 相关面试题 盒子模型 盒子水平垂直居中的方案 经典布局方案 圣杯布局 双飞翼布局 flex布局 定位方式布局 css实现三角形 JS 相关面试题 8种数据 ...
- Vue:echarts画图实战,异步获取数据在Vue上使用echarts进行画图
Vue:echarts画图实战,异步获取数据在Vue上使用echarts进行画图 一.效果图 二.资源 主题编辑器 ECharts 教程 实现代码------想要进行实战的同学可以研究以下代码,下面的 ...
- 使用@Async异步注解导致该Bean在循环依赖时启动报BeanCurrentlyInCreationException异常的根本原因分析,以及提供解决方案
前言 今天在自己工程中使用@Async的时候,碰到了一个问题:Spring循环依赖(circular reference)问题. 或许刚说到这,有的小伙伴就会大惊失色了.Spring不是解决了循环依赖 ...
最新文章
- 美国AI语音大牛转投小米!因政治正确遭名校JHU开除,其后怒拒FB百万美元合同...
- Spring Data JPA_多表关联查询中应该注意的问题
- IT部门的服务工作方式、工作内容有了彻底的改变——安徽移动通信有限责任公司...
- Linux whoami指令
- 新事务不能登记到指定的事务处理器中异常的处理----MSDTC的正确配置
- 猎豹浏览器小号窗口怎么打开 小号窗口打开方法简述
- 好程序员Web前端分享一些小知识!
- arcgis engine设置数据源路径_不懂ArcGIS,你前期分析用什么做的?
- Matlab fftshift and ifftshift and some confusions
- 对于一些360文件粉碎无法删除的解决方案
- 深信服 AC上网 行为管理设置
- 13视频监控-01视频监控布局-videobox
- android系统源码学习 -- 蓝牙 bluetooth (一) 入门
- 安装java的心得体会_java实训心得体会范文
- c++空指针的定义-0L
- 邮件附件批量下载小程序
- Python爬虫实例(2)--beautifulsoup的应用
- 桌面图标文件夹图标隐藏恢复
- 除了加班、掉头发,程序员还在承受些什么?
- 局域网通过python传输文件
热门文章
- 猿匹配 , 一款使用环信实现的一个开源聊天应用含服务器
- 软件测试中遇到的印象深刻的问题及反思
- 程派高式八卦掌传人——刘树行
- 配对t检验的应用条件是什么_配对t检验的适用条件,独立样本T检验、配对T检...
- ArcEngine旋转IRotateTracker
- 程序员吃饭段子Java吃完就走_爆笑段子:一朋友是个程序员,有一次和他吃饭,他愁眉苦脸的说...
- 直达号PK公众号的背后还有哪些市场空间?
- 转-零死角玩转stm32-高级篇之SDIO(4bit + DMA、支持SDHC、带协议分析)
- OpenCV/C++:点线面相关计算
- 华三防火墙透明模式典型组网配置实例