Koa項(xiàng)目搭建過(guò)程

原文地址:[Koa項(xiàng)目搭建過(guò)程]https://www.bougieblog.cn/blog/2018/04/10%20-%20Koa%E9%A1%B9%E7%9B%AE%E6%90%AD%E5%BB%BA%E8%BF%87%E7%A8%8B.html)

9067644-6cd904f060e5067f.png

Java中的Spring MVC加MyBatis基本上已成為Java Web的標(biāo)配椭坚。Node JS上對(duì)應(yīng)的有Koa搜贤、Express战得、Mongoose、Sequelize等。Koa一定程度上可以說(shuō)是Express的升級(jí)版。許多Node JS項(xiàng)目已開(kāi)始使用非關(guān)系型數(shù)據(jù)庫(kù)(MongoDB)。Sequelize對(duì)非關(guān)系型數(shù)據(jù)庫(kù)(MSSQL、MYSQL晓折、SQLLite)做了支持。

Koa項(xiàng)目構(gòu)建

cnpm install -g koa-generator

// 這里一定要用koa2
koa2 /foo

Koa常用中間件介紹

koa-generator生成的應(yīng)用已經(jīng)包含常用中間件了兽泄,這里僅說(shuō)它里面沒(méi)有用到的漓概。

koa-less

app.use(require('koa-less')(__dirname + '/public'))

必須在static前use,不然會(huì)無(wú)效病梢。
stylesheets文件夾下新建styles.less胃珍,并引入所有模塊化less文件。

@import 'foo.less';
@import 'bar.less';

這樣所有的樣式會(huì)被編譯成一個(gè)style.css蜓陌。在模板(pug)中引用style.css就行了觅彰。

koa-session

// 設(shè)置app keys,session會(huì)根據(jù)這個(gè)進(jìn)行加密
app.keys = ['some secret hurr'];
// 配置session config
const CONFIG = {
    key: 'bougie:session',
    /** (string) cookie key (default is koa:sess) */
    maxAge: 1000 * 60 * 60 * 24 * 7,
    overwrite: true,
    /** (boolean) can overwrite or not (default true) */
    httpOnly: true,
    /** (boolean) httpOnly or not (default true) */
    signed: true,
    /** (boolean) signed or not (default true) */
    rolling: true,
    /** (boolean) Force a session identifier cookie to be set on every response. The expiration is reset to the original maxAge, resetting the expiration countdown. (default is false) */
    renew: false,
    /** (boolean) renew session when session is nearly expired, so we can always keep user logged in. (default is false)*/
};

// 應(yīng)用中間件
app.use(session(CONFIG, app));

這個(gè)必須在router前use钮热,不然會(huì)無(wú)效填抬。
基本使用,可以當(dāng)成一個(gè)普通對(duì)象

// 賦值
ctx.session.statu = value
// 取值
ctx.session.statu
// 刪除
ctx.session.statu = null

koa-proxies

用于代理配置

const proxy = require('koa-proxies')
app.use(proxy('/octocat', {
    target: 'https://api.github.com/users',    
    changeOrigin: true,
    agent: new httpsProxyAgent('http://1.2.3.4:88'),
    rewrite: path => path.replace(/^\/octocat(\/|\/\w+)?$/, '/vagusx'),
    logs: true
}))

路由控制

開(kāi)發(fā)主要集中在路由控制這里隧期,包括restful接口和模板渲染

獲取參數(shù)(request)

查詢參數(shù)(?param=a)

ctx.query.param

路由參數(shù)(/:id)

ctx.params.id

POST參數(shù)(JSON或Form)

ctx.request.body

請(qǐng)求回應(yīng)(response)

服務(wù)器響應(yīng)給客戶端的數(shù)據(jù)

restful

ctx.body = yourData

模板渲染

默認(rèn)從views目錄開(kāi)始飒责,不許加文件后綴

ctx.render('layout', yourData)

路由攔截

未登錄時(shí)拒絕請(qǐng)求,這樣會(huì)返回404

const userAuth = (ctx, next) => {
    let isLogin = ctx.session.isLogin
    if(isLogin) return next()
}
router.use('/', userAuth)

此操作會(huì)包含在路由仆潮,如"/a"宏蛉、"/b"等,需在子路由之前use性置,不然會(huì)無(wú)效

2018-04-28 17:36更新

常用中間件

koa-static-cache

靜態(tài)緩存拾并,生產(chǎn)模式下啟用

const staticCache = require('koa-static-cache')
// 靜態(tài)緩存
app.use(staticCache(path.join(__dirname, 'public'), {
    maxAge: 365 * 24 * 60 * 60
}))

koa-compress

gzip壓縮,生產(chǎn)模式下啟用

const compress = require('koa-compress')
// gzip
app.use(compress({
    filter: function (content_type) {
        return /text/i.test(content_type)
    },
    threshold: 2048,
    flush: require('zlib').Z_SYNC_FLUSH
}))

404處理

需要在router之后use

// 404
app.use(async (ctx) => {
    await ctx.render('notFound')
})

https配置

我在騰訊云申請(qǐng)的TrustAsia TLS RSA CA一年免費(fèi)證書(shū)鹏浅。網(wǎng)上教程都是用openssl生成pem文件辟灰,其實(shí)并不需要這么做。下載后提取nginx文件夾下的crtkey文件就行了篡石。

var https = require('https');
var path = require('path');
var fs = require('fs');
var options = {
    key: fs.readFileSync(path.resolve(__dirname, './SSL/2_www.bougieblog.cn.key')),  //ssl文件路徑
    cert: fs.readFileSync(path.resolve(__dirname, './SSL/1_www.bougieblog.cn_bundle.crt'))  //ssl文件路徑
};
https.createServer(options, app.callback()).listen(443);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市西采,隨后出現(xiàn)的幾起案子凰萨,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胖眷,死亡現(xiàn)場(chǎng)離奇詭異武通,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)珊搀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)冶忱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人境析,你說(shuō)我怎么就攤上這事囚枪。” “怎么了劳淆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵链沼,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我沛鸵,道長(zhǎng)括勺,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任曲掰,我火速辦了婚禮疾捍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘栏妖。我一直安慰自己乱豆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布底哥。 她就那樣靜靜地躺著咙鞍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪趾徽。 梳的紋絲不亂的頭發(fā)上续滋,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音孵奶,去河邊找鬼疲酌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛了袁,可吹牛的內(nèi)容都是我干的朗恳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼载绿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼粥诫!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起崭庸,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤怀浆,失蹤者是張志新(化名)和其女友劉穎谊囚,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體执赡,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡镰踏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沙合。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奠伪。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖首懈,靈堂內(nèi)的尸體忽然破棺而出绊率,到底是詐尸還是另有隱情,我是刑警寧澤猜拾,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布即舌,位于F島的核電站,受9級(jí)特大地震影響挎袜,放射性物質(zhì)發(fā)生泄漏顽聂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一盯仪、第九天 我趴在偏房一處隱蔽的房頂上張望紊搪。 院中可真熱鬧,春花似錦全景、人聲如沸耀石。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)滞伟。三九已至,卻和暖如春炕贵,著一層夾襖步出監(jiān)牢的瞬間梆奈,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工称开, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留亩钟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓鳖轰,卻偏偏與公主長(zhǎng)得像清酥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蕴侣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Address:https://www.zybuluo.com/XiangZhou/note/208532 Exp...
    天蠍蒗漫閱讀 11,304評(píng)論 2 55
  • 前言 web到目前為止走過(guò)了1.0焰轻、2.0、移動(dòng)互聯(lián)網(wǎng)昆雀、本地應(yīng)用化幾個(gè)階段鹦马,這使得js變得炙手可熱胧谈,許多原來(lái)在se...
    白昔月閱讀 1,765評(píng)論 3 6
  • 版權(quán)聲明:本文為博主原創(chuàng)文章旭从,未經(jīng)博主允許不得轉(zhuǎn)載。 webpack介紹和使用 一场仲、webpack介紹 1和悦、由來(lái) ...
    it筱竹閱讀 11,116評(píng)論 0 21
  • 不覺(jué)間 開(kāi)始了另一種生活 非常容易觸動(dòng) 因?yàn)檠刂弁?找回了魂魄 一碰到桃子 桃子就癟爛成桃核 抽出新芽,瞬間長(zhǎng)成...
    草茅閱讀 323評(píng)論 2 5
  • 真正的平靜究竟是什么馍忽? 是心靜如水 夜幕降臨 我們把自己沉浸于寂靜的午夜夢(mèng)回中聆聽(tīng)心中低語(yǔ),你能感受到這份平靜如水...
    沐馨馨閱讀 565評(píng)論 0 0