nodejs 异步编程async/await
参考:https://www.jianshu.com/p/2132904b9768
在路由js中
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
router.post('/',async function (request,response) {
var userName=request.body.userName;
var password=request.body.password;
var result=await login.panUser(userName,password);
console.log("/routes/login / result");
console.log(result);
response.send(result);
})
module.exports = router;
在路由调用的js文件login.js中
const global=require('./global'); var Promise=require('Promise'); const login={ panUser:async function (userName,password) { var sql = "select * from account where userName =" + userName; console.log("sql" + sql); var result=await global.db.checkPlayer(userName); console.log("/game/login panUser() result" + result); if(result==null||result=='') { console.log("/game/login panUser() if"); result="no"; } else { console.log("/game/login panUser() else"); var dbPassword = result[0]['password']; console.log("/game/login panUser() Password)"); console.log("/game/login panUser() Password)"+password+"dbPassword="+dbPassword); if (password == dbPassword) { result = true; } else { result = false; } } console.log("/game/login panUser() resolve(result)"); console.log(result); return result; } }
在login.js调用的db文件
//查询玩家 that.checkPlayer =async function (userName) { return new Promise(function(resolve, reject) { //查找玩家数据 let sql = "select * from account where userName = " + userName + ";"; try{ query(sql, function (err, data) { if (err) { data=null; console.log('err = ' + err); } console.log('check player = ' + JSON.stringify(data)); //cb(err, data); resolve(data); }); } catch (event) { resolve(null); } }); };
使用全局变量文件global
const db=require('./../utility/http/db'); const global={}; global.db=db(); module.exports= global;
踩坑:
在login.js中 需要用 await 来调用db中的函数,不能使用
return new Promise(function(resolve, reject)