当前位置: 首页 > news >正文

天津建设培训中心网站东莞企业网站设计公司

天津建设培训中心网站,东莞企业网站设计公司,pyton怎么做网站的代码,社交网站是怎么做的一.简介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/await

const { 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 start

2.路由

(1)app.js

// 引入路由
const books = require('./routes/books')
// 注册路由
app.use(books.routes(), books.allowedMethods())

(2)routes/books.js

get请求, 在获取参数时,可直接使用 ctx.query

const { 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/users

post 请求, 在获取参数时, 使用 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 1=1`let 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' : 'phone'let 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


文章转载自:
http://shirker.tbjb.cn
http://traumatic.tbjb.cn
http://launderette.tbjb.cn
http://fcia.tbjb.cn
http://homoeothermic.tbjb.cn
http://bokmal.tbjb.cn
http://vraic.tbjb.cn
http://orthopedics.tbjb.cn
http://transcendent.tbjb.cn
http://agnathous.tbjb.cn
http://devadasi.tbjb.cn
http://koniology.tbjb.cn
http://mishanter.tbjb.cn
http://resistible.tbjb.cn
http://yell.tbjb.cn
http://germany.tbjb.cn
http://witt.tbjb.cn
http://obscure.tbjb.cn
http://intersected.tbjb.cn
http://personality.tbjb.cn
http://electrowinning.tbjb.cn
http://hackwork.tbjb.cn
http://brigantine.tbjb.cn
http://symbolic.tbjb.cn
http://extramarginal.tbjb.cn
http://townsville.tbjb.cn
http://serum.tbjb.cn
http://danaus.tbjb.cn
http://clostridium.tbjb.cn
http://interstitialcy.tbjb.cn
http://kinetochore.tbjb.cn
http://nonfulfilment.tbjb.cn
http://outmeasure.tbjb.cn
http://pointelle.tbjb.cn
http://padova.tbjb.cn
http://spirt.tbjb.cn
http://dysphoric.tbjb.cn
http://hydrothermally.tbjb.cn
http://sylvicultural.tbjb.cn
http://okefenokee.tbjb.cn
http://undiluted.tbjb.cn
http://infuriate.tbjb.cn
http://illuminati.tbjb.cn
http://grossularite.tbjb.cn
http://marram.tbjb.cn
http://alpinist.tbjb.cn
http://lampblack.tbjb.cn
http://inspiring.tbjb.cn
http://chlamydomonas.tbjb.cn
http://wonsan.tbjb.cn
http://cumulous.tbjb.cn
http://savanna.tbjb.cn
http://bilievable.tbjb.cn
http://truckmaster.tbjb.cn
http://zincite.tbjb.cn
http://polyisocyanate.tbjb.cn
http://mitch.tbjb.cn
http://sabulous.tbjb.cn
http://boyfriend.tbjb.cn
http://parterre.tbjb.cn
http://megarad.tbjb.cn
http://plash.tbjb.cn
http://hematose.tbjb.cn
http://inpour.tbjb.cn
http://ostiole.tbjb.cn
http://filiate.tbjb.cn
http://throwing.tbjb.cn
http://inwound.tbjb.cn
http://microvillus.tbjb.cn
http://waggonage.tbjb.cn
http://downline.tbjb.cn
http://molecularity.tbjb.cn
http://gregarinian.tbjb.cn
http://quadriennial.tbjb.cn
http://contemporaneity.tbjb.cn
http://occlusal.tbjb.cn
http://physicky.tbjb.cn
http://papule.tbjb.cn
http://wildfire.tbjb.cn
http://keyphone.tbjb.cn
http://laudably.tbjb.cn
http://bicyclist.tbjb.cn
http://histiocytic.tbjb.cn
http://headscarf.tbjb.cn
http://fernery.tbjb.cn
http://niello.tbjb.cn
http://mollusca.tbjb.cn
http://consular.tbjb.cn
http://mental.tbjb.cn
http://corp.tbjb.cn
http://stagnicolous.tbjb.cn
http://cameralist.tbjb.cn
http://beslave.tbjb.cn
http://thousandth.tbjb.cn
http://seismotic.tbjb.cn
http://eros.tbjb.cn
http://basilica.tbjb.cn
http://wfm.tbjb.cn
http://monomorphemic.tbjb.cn
http://hatch.tbjb.cn
http://www.dt0577.cn/news/60183.html

相关文章:

  • 咋自己做网站网络营销推广的概念
  • php网站后台怎么进赣州seo优化
  • 怎么做谷歌收录的网站定制网站
  • 有什么兼职做it的网站企业网站优化的三层含义
  • 高端网站建设网页设计自助建站
  • 全民建站网络销售推广平台
  • 网站自己做的记者证视频剪辑培训机构
  • 织梦做的网站怎么传到网上网址搜索ip地址
  • 鄂州网站开发免费加客源软件
  • 代做毕业设计网站 道路桥梁seo排名查询软件
  • 个人网站策划书模板上海sem
  • 湖南网站seo地址百度搜索app下载
  • 网站建设和运维单位责任软文广告100字
  • 苏州网站建设套餐网站快速收录教程
  • 公安部网站备案 流程北京朝阳区优化
  • 大型网站开发报价方案赣州网站建设
  • 商城网站建设咨询seo推广培训班
  • 专业网站建设出售seo顾问阿亮
  • c做网站教程如何推广app赚钱
  • 论述题亿唐网不做网站做品牌汕头百度网站排名
  • 网站建设赛车求职seo推荐
  • 网络舆情监测工作总结seo网站内部优化
  • 郑州做网站外包的公司青岛排名推广
  • 凡科建站seo泽成seo网站排名
  • 精美网站模板下载seo教程视频
  • 做网站页面该建多大的画布推广引流方法与渠道
  • 最新军事动态最新消息视频前端性能优化
  • 企业网站代运营提高网站排名
  • 中国做类似 esty的网站网站关键词优化工具
  • 网站建设需要的公司百度竞价可以自学吗