网站后台上次图片,店铺推广软文300字,入门 做网站 书籍,文件网站建设一.简介koa2是基于 Node.js 平台的下一代 web 开发框架, 致力于成为一个更小、更富有表现力、更健壮的 Web 框架。 可以避免异步嵌套. express中间件是异步回调,Koa2原生支持async/await二.async/awaitconst { rejects } require(assert);
const { resolve } req…一.简介koa2是基于 Node.js 平台的下一代 web 开发框架, 致力于成为一个更小、更富有表现力、更健壮的 Web 框架。 可以避免异步嵌套. express中间件是异步回调,Koa2原生支持async/await二.async/awaitconst { rejects } require(assert);
const { resolve } require(path/posix);
// 普通函数
const getData1 (){return { uname: 普通函数}
}
console.log(getData1()); // { uname: 普通函数 }
// async 普通函数
const getData2 async (){return { uname: async 普通函数}
}
console.log(getData2()); // Promise { { uname: 普通函数 } }
getData2().then(data{console.log(data); // { uname: async 普通函数 }
})const getData3 (params){return new Promise((resolve,reject){ //resolve 成功的结果, reject失败的结果if(!params){reject({ err:参数为空! })}else{resolve({ message: 成功! })}})
}getData3().then(data{console.log(1resolve传的数据, data)
}).catch(err{console.log(1reject传的数据---,err);
}) //reject传的数据--- { err: 参数为空! }
// 异步函数使用.catch接收错误信息, 同步函数使用try{}catch{}
getData3(222).then(data{console.log(2resolve传的数据, data)
}).catch(err{console.log(2reject传的数据---,err);
}) //2resolve传的数据 { message: 成功! }三.koa2的基本使用1.安装及创建项目初始化 npm init -y安装 npm i koa -g 使用脚手架的方式安装 npm install -g koa-generator创建项目 koa2 koapro[koapro 项目名称]配置前的项目启动 npm start koapro 或 npm run start2.路由(1)app.js// 引入路由
const books require(./routes/books)
// 注册路由
app.use(books.routes(), books.allowedMethods())(2)routes/books.jsget请求, 在获取参数时,可直接使用 ctx.queryconst { searchList } require(../utils/mysqlUtils)
// 引入koa
const router require(koa-router)()
// 设置路由前缀
router.prefix(/books)
// 设置路由
router.get(/search,async (ctx,next){ //ctx 相当于 req,res// 页面显示内容 // 方式1: 直接使用ctx.body // ctx.body hahah// 方式2: 使用模板渲染/* await ctx.render(index,{title: 哈哈哈哈}) *///注意 async/await的使用, 避免无法返回查询结果await searchList(ctx, books)
})
// 导出
module.exports router(3)routes/userspost 请求, 在获取参数时, 使用 ctx.request.body 接收const router require(koa-router)()
const { login } require(../utils/mysqlUtils)
router.prefix(/users)
router.post(/login, async function (ctx, next) {await login(ctx,users)
})module.exports router(4)连接数据库const mysql require(mysql)
// 加密模块中的随机生成数
const sqlconfig require(../config/sqlconfig)
// 使用连接池 pool.createPool()
let pool mysql.createPool(sqlconfig)
// 执行数据库
const exec (sql) {return new Promise((resolve, reject) {pool.getConnection((err, conn) {if (err) {//连接错误reject(err)} else {//连接成功conn.query(sql, (err, data) {if (err) {//操作失败reject(err)} else {resolve({code: 0,message: 操作成功!,data,})// resolve(data)}})}// 当连接不再使用时用conn对象的release方法将其归还到连接池中conn.release()})})
}
// 查询 获取get请求参数使用 ctx.query
const searchList async(ctx, table) {// 根据输入的查询条件查找数据 若无参数则查询所有let sql select * from ${table} where 11let keys Object.keys(ctx.query)let values Object.values(ctx.query)let keyArr []let valArr []let str let i 0keys.forEach((item,index){keyArr.push(item.trim())valArr.push(${values[index].trim()})str and ${keyArr[i]} like %${valArr[i]}% i})sql strconst data await exec(sql)ctx.body data
}const login async (ctx, table){// 根据 phone / email 作为账号来登录 输入内容不为空 判断是Email还是phone 根据对应信息查询数据 如果能查到则登录成功 否则登陆失败 let paramsArr Object.values(ctx.request.body)// 有数据let flag 0if(paramsArr paramsArr.length 0){// 遍历数组并去空paramsArr.forEach(item {if(item.trim().length 0){flag}})// 账号 密码存在if(flag 0 ctx.request.body.password.length 0){let username paramsArr.toString().indexOf() 0 ? email : phonelet sql select * from users where if(username email){const {password , email } ctx.request.body// 邮箱登录sql password ${ password } and email ${email} console.log(sql);// 查询数据 查到则登录成功await exec(sql).then(result{console.log(result.data);if(result.data.length 0){ctx.body {code: 1,message: 登录成功!,result}}else{ctx.body {code: 0,message: 登录失败!}}})}if(username phone){const {password , phone } ctx.request.body// 邮箱登录sql password ${ password } and phone ${phone} console.log(sql);// 查询数据 查到则登录成功await exec(sql).then(result{// console.log(result);if(result.data.length 0){ctx.body {code: 1,message: 登录成功!,result}}else{ctx.body {code: 0,message: 登录失败!}}})}}else{// 账号或密码为空ctx.body {code: -1,message : 账号或密码不能为空!}}}else{ctx.body {code: -1,message : 账号和密码不能为空!}}}
module.exports {searchList,login
}源代码放在这里啦~~~https://download.csdn.net/download/qq_54379580/87443081