nodejs-mysql异步(2)

来源:互联网 发布:长得帅的女生知乎 编辑:程序博客网 时间:2024/05/17 07:34
之前有说到用mysql存在很大的异步的问题。异步是什么我就不说了。随便找个博客就知道了。

大哭大哭

然后我想说,我把mysql写在了user.js模块里面,然后我在server.js里想要获取user.js导出的user模块中的内容,但是本来就异步,再用模块就老式拿不到我想要的值,每次值拿了为undefined,数据库还没开始。郁闷。。。

    比如以前的代码这样:

server.js

app.get('/',function(req,res){              //主页面  console.log("server.js--主页面请求") ;    var length = user.findUser() ;    console.log("server.js--"  + length) ;                                    //undefined
    console.log("server.js--"  + user.personLength) ;             //undefined
}
user.js

mydatabase.query( findUserQuery, function(err,result){    console.log("user.js--" + result[0].length ) ;    user.personLength = result[0].length ;             //用user模块导出用户个数length    return result[0].length ;                                     //用user函数返回值返回length}


好吧,那么这个nodejs的异步就搞死我了。


解决:   我现在用的Async模块进行异步的处理。

1.  导入 npm install Async --save

2.  在js文件加入

var async = require('async') ;  

修改的js:  

sever.js


user.findUser = function(){ 

async.waterfall([ //查询
function(callback){
mydatabase.query( findUserQuery, function(err,result){
 var resu = result.length ; c
allback(err,resu) ;
} ) ;
},
function(resu,callback) {
console.log( "user.js--人数:" + resu );
 
user.personLength = resu;
var over = '"user.js--查询用户结束"' ;
 
callback(null,over) ;
 
}],function(err,over){
 if(err)
console.log(err ) ;
else{
 console.log( over ) ;
 
return function(){ //没有作用
return
user.personLength ;
}
 }
})
    return function(){                 //起作用,在server.js中产生效果            return user.personLength ;     }}


user.js

user.findUser = function(){ 
async.series([
function(callback){
 var re = user.findUser( ) ;
 
console.log("server.js--" +re) ; // server.js-- function(){return user.personLength} 这里的re其实是
//findUser的返回函数值,!!!而且是字符串啊!!!
 
callback(re) ; }
],function(err,personLength){
 console.log("server.js--" +personLength) ;
})
}
结果: conosle控制台


服务器开启: 8080server.js--function (){                                //字符串----            return user.personLength ;               }server.js--user.js--人数:12"user.js--查询用户结束"

我的内心崩溃:我忍无可忍。换了一种方法:直接把mysql移动到了server。。。

server.js

app.get('/',function(req,res){              //主页面    // console.log("server.js--主页面请求") ;    async.waterfall([        //查询        function(callback){            mydatabase.query( user.findUserQuery, function(err,result){                var resu = result.length ;                callback(err,resu) ;            } ) ;        }    ],function(err,personNumber){        if(err)            console.log(err ) ;        else{            console.log( "server.js-- " +personNumber) ;                    //server.js --12            res.render('./pages/index',{                title: '未登录'            }) ;        }    })}) ;

user.js

var user = {   findUserQuery: 'SELECT * FROM ' +userTable ,   insertUserQuery: 'INSERT INTO ' +userTable +' (NAME,PASSWORD,MINORITY) VALUES (?,?,?)' ,   searchUserQuery: 'SELECT * FROM ' +userTable + ' WHERE NAME=? AND PASSWORD=?'} ;

这样是能获取到数值的,但是不知道为什么 我不太爽------

虽然我直接换了mysql的地方,但是我还是不会放弃刚刚那样传值,等我休息休息再来!


原创粉丝点击