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)
浙公网安备 33010602011771号