koajs mysql_koajs 项目实战(一)

这篇博客介绍了Koa.js,一个基于Node.js的Web开发框架,包括Koa1和Koa2的区别与使用。通过示例展示了如何创建应用、解决回调陷阱问题,并比较了Koa2与Koa1、Express的性能。接着,博主分享了采用Koa1或Koa2、Mongoose和EJS模板搭建项目框架的方法,以及如何修改模板和引入Bootstrap来创建界面。最后,讨论了如何在EJS模板中添加登录注册模态对话框。
摘要由CSDN通过智能技术生成

(一)koa

1.Koa(koajs)--  基于 Node.js 平台的下一代 web 开发框架

koa1

npm install koa -g

npm install koa-generator -g

koa eduline1

cd eduline1

npm install

运行:npm start

访问:http://localhost:3000

koa2

npm install koa@2 -g

npm install koa-generator -g

koa2 eduline2

cd eduline2

npm install

运行:npm start

访问:http://localhost:3000

2.koajs 框架解决的问题

解决了 Express 中具有的回调陷阱问题,大大优化了开发体验。

koa1: Generator + yield               es6

示例:

index.js

var router = require('koa-router')();

router.get('/', function *(next) {

// 注:yield 后面必须是一个 Promise

// let rs = yield new Promise(function(resolve,reject){

// setTimeout(function() {

// console.log('执行setTimeout');

// resolve('返回结果');

// },2000);

// })

// reject的用法

let rs = 'null';

try{

rs = yield new Promise(function(resolve,reject){

setTimeout(function(argument) {

console.log('执行setTimeout');

reject('出错');

},2000);

})

}catch(err){

console.log(err);

}

console.log('aaaaaaaa=' + rs);

this.body = 'hello,koa1' + rs;

// yield this.render('index', {

// title: 'Hello World Koa!'

// });

});

module.exports = router;

koa2: asyinc + await                    es7

示例:

index.js

const router = require('koa-router')()

router.get('/', async (ctx, next) => {

// await 后面需要接 Promise

// let rs = await new Promise(function(resolve,reject){

// setTimeout(function(){

// console.log('执行setTimeout');

// resolve('返回结果');

// },2000);

// })

// reject的用法

let rs = 'null';

try{

rs = await new Promise(function(resolve,reject){

setTimeout(function(){

console.log('执行setTimeout');

reject('出错');

},2000)

})

}catch(err){

console.log(err);

}

ctx.body = 'hello,koa2' + rs;

// await ctx.render('index', {

// title: 'Hello Koa 2!'

// })

})

module.exports = router

3.目前流行版本为 koa1 和 koa2

性能: koa2 > koa1 > Express

但: koa2 项目中如果安装多个插件,性能呈几何状下降,显示 koa2 尚不稳定。

(二)项目框架

客户端: jquery + bootstrap

服务端: koa1(koa2) + mongose(数据库mongodb) + ejs模板

(三)修改模板

安装ejs模块:

npm install --save ejs

koa1:

app.js

app.use(views('views', {

root: __dirname + '/views',

// default: 'jade'

default: 'ejs' // 默认使用ejs语法

}));

users.js

// 默认路由

router.get('/', function *(next) {

this.body = 'this is a users response!';

});

// 登录页路由

router.get('/login', function *(next) {

// this.body = 'login页面';

// 绑定login.ejs文件

yield this.render('login',{});

});

koa2:

app.js

app.use(views(__dirname + '/views', {

// extension: 'pug'

extension: 'ejs' // 默认使用ejs语法

}))

users.js

// 默认路由

router.get('/', async function (ctx, next) {

// ctx.body = 'this is a users response!'

ctx.state = {

title:'我是koa2的login'

};

})

// 登录页路由

router.get('/login', async function (ctx, next) {

await ctx.render('login', {});

});

3796768731b2caf35a33c7a8fc863348.png

ejs 格式

ebbec2b750d9b395c642dacc5de7b067.png

(四)引入 bootstrap 并创建 index 界面

f3584cd9574be3e432bc2ece5f163aee.png

index.ejs

在线教育

.horul{

float: left;

font-size: 1.5em;

line-height: 2em;

}

.horul li{

display: inline-block;

list-style: none;

height: 25px;

width: 3em;

text-align: center;

}

.menu{

width: 1024px;

background-color: #005f3d;

height: 1.5em;

margin: 0 auto;

font-size: 1.5em;

display: hidden;

text-align: center;

}

.menu span{

float: left;

display: inline-block;

color: #ffffff;

margin-left: 1em;

}

.answer tr td div{

width: 45px;

height: 45px;

background-color: green;

color: #ffffff;

text-align: center;

}

a,a:hover,a:visited{

color: #ffffff;

}

源库

  • 问答
  • 文章
  • 笔记
  • 活动
  • 最新
  • 最热
  • 未回答
0
回答
36
浏览
node.js如何与vue.js两线开发
3
回答
12
浏览
node.js如何与vue.js两线开发
排行榜
1Bangalore
2Mumbal
3Bangalore

效果图:

8cfab0bb80356406c9aca68a0641aee7.png

(五)显示登录注册模态对话框

1.index.ejs添加模态框

最下面加:

index.ejs

在线教育

.horul{

float: left;

font-size: 1.5em;

line-height: 2em;

}

.horul li{

display: inline-block;

list-style: none;

height: 25px;

width: 3em;

text-align: center;

}

.menu{

width: 1024px;

background-color: #005f3d;

height: 1.5em;

margin: 0 auto;

font-size: 1.5em;

display: hidden;

text-align: center;

}

.menu span{

float: left;

display: inline-block;

color: #ffffff;

margin-left: 1em;

}

.answer tr td div{

width: 45px;

height: 45px;

background-color: green;

color: #ffffff;

text-align: center;

}

a,a:hover,a:visited{

color: #ffffff;

}

源库

  • 问答
  • 文章
  • 笔记
  • 活动
  • 最新
  • 最热
  • 未回答
0
回答
36
浏览
node.js如何与vue.js两线开发
3
回答
12
浏览
node.js如何与vue.js两线开发
排行榜
1Bangalore
2Mumbal
3Bangalore

2.views下建立login.ejs

登录
email:
密码:
注册
email:
密码:
重复
昵称

3.添加登录页面

routes/users.js中添加

koa1:

// 登录页路由

router.get('/login', function *(next) {

// 绑定login.ejs文件

yield this.render('login',{});

});

koa2:

// 登录页路由

router.get('/login', async function (ctx, next) {

await ctx.render('login', {});

});

效果图:

d8aba1bff46dfb327e5a2d29b8b397fd.png

.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值