分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

js:nodejs通过async异步提交事务数据

发布时间:2023-09-06 01:34责任编辑:沈小雨关键词:jsnodejs

一,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 ....");});

js:nodejs通过async异步提交事务数据

原文地址:https://www.cnblogs.com/dybe/p/8227780.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved