摘要:前言隨著技術的不斷發展,前端工程師也被賦予了越來越多的職責。接下來這篇文章,完成一個簡單的登錄注冊,能讓你快速上手,成為一個小全棧工程師,快速開始安裝因為已經完全支持語法,所以請保證的版本在以上推薦一個的多版本管理工具。
前言
隨著技術的不斷發展,前端工程師也被賦予了越來越多的職責。不再是從前只需要切個圖,加個css樣式就能完成任務的切圖仔了。接下來這篇文章,完成一個簡單的登錄注冊,能讓你快速上手,成為一個‘小全棧工程師’,here we go !
koa快速開始 安裝因為node.js v7.6.x已經完全支持async/await語法,所以請保證node的版本在7.6以上
推薦一個node的多版本管理工具:nvm。如何安裝這里不再贅述,網上的教程有很多
https://github.com/creationix...
// 初始化package.json npm init // 安裝koa2 npm install koa一個hello world
新建一個index.js,敲上以下代碼
//index.js const Koa = require("koa") const app = new Koa() app.use( async (ctx, next) => { ctx.response.body = "你好,我是內地吳彥祖" }) app.listen(3333, ()=>{ console.log("server is running at http://localhost:3333") })
在我們的命令行敲上
node index.js
就可以看到運行結果啦:
幾個核心概念 中間件好基友ctx和next在上面的代碼中,我們可以看到app.use后面使用了2個參數,ctx和next,下面我們介紹一個這哥倆到底干嘛的
ctxctx作為上下文使用,Koa將 node 的 request, response 對象封裝進一個多帶帶對象。即ctx.request 、 ctx.response。Koa 內部又對一些常用的屬性或者方法做了代理操作,使得我們可以直接通過 ctx 獲取。比如,ctx.request.url 可以寫成 ctx.url。
nextnext 參數的作用是將處理的控制權轉交給下一個中間件
經典的洋蔥圖概念能很好的解釋next的執行,請求從最外層進去,又從最里層出來。我們看一個例子
const Koa = require("koa") const app = new Koa() app.use(async (ctx, next)=>{ let startTime = new Date().getTime() await next() let endTime = new Date().getTime() console.log(`此次的響應時間為:${endTime - startTime}ms`) }) app.use(async (ctx, next) => { console.log("111, 然后doSomething") await next() console.log("111 end") }) app.use(async (ctx, next) => { console.log("222, 然后doSomething") await next() console.log("222 end") }) app.use(async (ctx, next) => { console.log("333, 然后doSomething") await next() console.log("333 end") }) app.listen(3333, ()=>{ console.log("server is running at http://localhost:3333") })
看一下運行結果:
如果將‘222’函數的next()去掉的話,會發生什么呢?
可以看到,后面的‘333’中間件直接不執行了。所以中間件的順序對next的執行有很大的影響
路由 koa-router我們常用koa-router來處理URL
安裝
npm i koa-router --save
看一個例子:
const Koa = require("koa") const app = new Koa() const Router = require("koa-router") const router = new Router() router.get("/", async (ctx, next) => { ctx.body = "你好,我這里是index頁" }) router.get("/user", async (ctx, next) => { ctx.body = "你好,我這里是user頁" }) router.get("/error", async (ctx, next) => { ctx.body = "你好,我這里是error頁" }) app.use(router.routes()) app.listen(3333, ()=>{ console.log("server is running at http://localhost:3333") })
koa-router也支持嵌套寫法,通過一個總路由裝載所有子路由,也非常的方便。看一個例子:
const Koa = require("koa") const app = new Koa() const Router = require("koa-router") // 子路由1 let oneRouter = new Router() oneRouter.get("/", async (ctx, next) => { ctx.body = "你好,我這里是oneRouter頁" }) // 子路由2 let twoRouter = new Router() twoRouter.get("/", async (ctx, next) => { ctx.body = "你好, 我這里是twoRouter頁" }).get("/home", async (ctx , next) => { ctx.body = "你好, 我這里是home頁" }) // 裝載所有子路由 let indexRouter = new Router() indexRouter.use("/one",oneRouter.routes(), oneRouter.allowedMethods()) indexRouter.use("/two",twoRouter.routes(), twoRouter.allowedMethods()) app .use(indexRouter.routes()) .use(indexRouter.allowedMethods()) app.listen(3333, ()=>{ console.log("server is running at http://localhost:3333") })
看一下運行結果:
koa-router提供了常見的 .get .put .post .del 接口來處理各種需求。實際開發中我們用的比較多的是get和post,我們來看看get例子:
const Koa = require("koa") const app = new Koa() const Router = require("koa-router") const router = new Router() router.get("/data", async (ctx , next)=> { let url = ctx.url // 從ctx的request中拿到我們想要的數據 let data = ctx.request.query let dataQueryString = ctx.request.querystring ctx.body = { url, data, dataQueryString } }) app.use(router.routes()) app.listen(3333, ()=>{ console.log("server is running at http://localhost:3333") })
在瀏覽器里輸入http://localhost:3333/data?user=wuyanzu&id=123456 ,可以看到運行結果
可以看到區別,.query返回的結果是對象,而.querystring返回的是字符串,這個很好理解。(chrome插件顯示成json格式)
如果遵從 RESTful 規范,比如請求要以 "/user/:id"的方式發出的話,我們可以用下面的例子來獲取到想要的數據
添加代碼
router.get("/data/:id", async (ctx, next) => { // 也從ctx中拿到我們想要的數據,不過使用的是params對象 let data = ctx.params ctx.body = data })
瀏覽器運行 http://localhost:3333/data/4396 看到結果
接下來我們看看post的例子
我們常用的請求post,它的數據是放在body當中的。這個時候就推薦一個非常常用且好用的中間件-koa-bodyparser
首先安裝
npm i koa-bodyparser --save
然后我們在剛才的代碼里添加
router.get("/post", async (ctx, next) => { // 模擬一段提交頁面 let html = `
你長的最像哪位明星
輸入一段你知道的車牌號
看一下運行結果
cachekoa操作cookie是非常方便的,也是從上下文ctx中獲取。
ctx.cookies.get(name, [options]) 讀取上下文請求中的cookie
ctx.cookies.set(name, value, [options]) 在上下文中寫入cookie
在我們剛才的post請求的代碼中加入:
router.post("/post/result", async (ctx, next) => { // 我們可以從ctx的request.body拿到提交上來的數據 let {name, num} = ctx.request.body if (name && num) { ctx.body = `hello,你最像的明星是:${name},ch你知道的車牌號是:${num}` ctx.cookies.set( "xunleiCode",num, { domain: "localhost", // 寫cookie所在的域名 path: "/post/result", // 寫cookie所在的路徑 maxAge: 10 * 60 * 1000, // cookie有效時長 expires: new Date("2018-09-17"), // cookie失效時間 httpOnly: false, // 是否只用于http請求中獲取 overwrite: false // 是否允許重寫 } ) } else { ctx.body = "啊哦~你填寫的信息有誤" } })
看一下運行結果:
koa操作session的話,需要用到koa-session,
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/98481.html
稍微整理了一下自己平時看到的前端學習資源,分享給大家。 html MDN:Mozilla開發者網絡 SEO:前端開發中的SEO css 張鑫旭:張鑫旭的博客 css精靈圖:css精靈圖實踐 柵格系統:詳解CSS中的柵格系統 媒體查詢:css媒體查詢用法 rem布局:手機端頁面自適應布局 移動前端開發之viewport的深入理解:深入理解viewport 淘寶前端布局:手機淘寶移動端布局 fl...
摘要:異步最佳實踐避免回調地獄前端掘金本文涵蓋了處理異步操作的一些工具和技術和異步函數。 Nodejs 連接各種數據庫集合例子 - 后端 - 掘金Cassandra Module: cassandra-driver Installation ... 編寫 Node.js Rest API 的 10 個最佳實踐 - 前端 - 掘金全文共 6953 字,讀完需 8 分鐘,速讀需 2 分鐘。翻譯自...
摘要:感謝大神的免費的計算機編程類中文書籍收錄并推薦地址,以后在倉庫里更新地址,聲音版全文狼叔如何正確的學習簡介現在,越來越多的科技公司和開發者開始使用開發各種應用。 說明 2017-12-14 我發了一篇文章《沒用過Node.js,就別瞎逼逼》是因為有人在知乎上黑Node.js。那篇文章的反響還是相當不錯的,甚至連著名的hax賀老都很認同,下班時讀那篇文章,竟然坐車的還坐過站了。大家可以很...
閱讀 1085·2021-11-19 09:40
閱讀 2225·2021-11-15 18:00
閱讀 1274·2021-10-18 13:34
閱讀 2255·2021-09-02 15:40
閱讀 1542·2019-08-30 14:01
閱讀 1120·2019-08-30 11:11
閱讀 2487·2019-08-29 15:26
閱讀 734·2019-08-29 14:15