nodejs-mysql异步(2)

之前有说到用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 控制台


服务器开启: 8080
server.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的地方,但是我还是不会放弃刚刚那样传值,等我休息休息再来!


你可能感兴趣的:(nodejs开发问题集锦)