国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

learning koa2.x

ygyooo / 2377人閱讀

摘要:路由封裝了和變量傳入將要處理的下一個(gè)異步函數(shù)由標(biāo)記的函數(shù)稱(chēng)為異步函數(shù),在異步函數(shù)中,可以用調(diào)用另一個(gè)異步函數(shù),這兩個(gè)關(guān)鍵字將在中引入。

koa2.x learning 路由 koa-router

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

ctx:封裝了request 和 response變量

next: 傳入將要處理的下一個(gè)異步函數(shù)

由async標(biāo)記的函數(shù)稱(chēng)為異步函數(shù),在異步函數(shù)中,可以用await調(diào)用另一個(gè)異步函數(shù),這兩個(gè)關(guān)鍵字將在ES7中引入。

${ctx.request.url} 輸出 請(qǐng)求的url 地址 ctx.url相當(dāng)于ctx.request.url,ctx.type相當(dāng)于ctx.response.type

處理路由器的操作分為:views、 string、 json、 處理get請(qǐng)求、 處理post請(qǐng)求

views
router.get("/", async (ctx, next) => {
  await ctx.render("index", {
    title: "Hello Koa 2!"
  })
})
string
router.get("/string",async (ctx, next) =>{ 
    ctx.response.body = `

welcome, hello

`; })
json
router.get("/json", async (ctx, next) => {
  ctx.body = {
    title: "koa2 json"
  }
})
處理get請(qǐng)求

var name = ctx.params.name;

router.get("/info/:name", async (ctx, next) => {
  var name = ctx.params.name;
  ctx.response.body = `

Hello, ${name}!

`; })
處理post請(qǐng)求

var name = ctx.request.body.name || "";

需要引入 koa-bodyparser 中間件, 創(chuàng)建 info.pug 用于處理表單

extends layout

block content
  h1= title
  form(action="/signin" method="post")
    p= "用戶(hù)名:"
    input(type="text" name="name" value="koa")
    p= "密碼:"
    input(type="password" name="password" value="koa")
    p
    input(type="submit" value="提交")
router.get("/info", async (ctx, next) => {
  await ctx.render("info",{
    title: "用戶(hù)信息"
  });
})
// 處理post請(qǐng)求
router.post("/signin", async (ctx,next) => {
  var name = ctx.request.body.name || "";
  var password = ctx.request.body.password || "";
  if(name === "koa" && password === "koa") {
    ctx.response.body = `

welcome, ${name}

`; }else{ ctx.response.body = `

Login faild!

Login

` } })
視圖 - views層

適用于 koa 的模板引擎選擇非常多,比如 jade、ejs、nunjucks、handlebars 、xtemplate 等。

Nunjucks是Mozilla開(kāi)發(fā)的一個(gè)純JavaScript編寫(xiě)的模板引擎 koa-nunjucks-2^3.0.2

https://mozilla.github.io/nun...

const koaNunjucks = require("koa-nunjucks-2")
app.use(koaNunjucks({
  ext: "html",
  path: path.join(__dirname, "views"),
  nunjucksConfig: {
    trimBlocks: true,
    noCache: false // 開(kāi)發(fā)環(huán)境下
  }
}));
// 模塊
{% extends "base.html" %}
{% block body %} 
No body
{% endblock %} // 循環(huán) {% for msg in data %}

{{ msg }}

{% endfor %} {% if hungry %} I am hungry {% elif tired %} I am tired {% else %} I am good! {% endif %}
操作cookie

koa提供了從上下文直接讀取、寫(xiě)入cookie的方法:

ctx.cookies.get(name, [options]) 讀取上下文請(qǐng)求中的cookie

ctx.cookies.set(name, value, [options]) 在上下文中寫(xiě)入cookie

// 處理cookie
router.get("/cookie", async (ctx,next) => {
  const options = {
    domain:"127.0.0.1",
    path:"/",
    maxAge: 10 * 60 * 1000, // cookie有效時(shí)長(zhǎng)
    expires: new Date("2019-02-02"),  // cookie失效時(shí)間
    httpOnly: false,  // 是否只用于http請(qǐng)求中獲取
    overwrite: false  // 是否允許重寫(xiě)
  }
  ctx.cookies.set("id","test cookie",options)

  ctx.response.body = `

cookies, ${ctx.cookies.get("id")}

`; // 輸出cookie值 })
操作session

將session存放在MySQL數(shù)據(jù)庫(kù)中 koa-session-minimal、koa-mysql-session "koa-session-minimal":"^3.0.4","koa-mysql-session":"^0.0.2"

const session = require("koa-session-minimal")
const MysqlSession = require("koa-mysql-session")

// 配置存儲(chǔ)session
let store = new MysqlSession({
  user: "root",
  password: "",
  database: "test",
  host: "127.0.0.1",
})
let cookie = {
  maxAge: "", // cookie有效時(shí)長(zhǎng)
  expires: "",  // cookie失效時(shí)間
  path: "", // 寫(xiě)cookie所在的路徑
  domain: "", // 寫(xiě)cookie所在的域名
  httpOnly: "", // 是否只用于http請(qǐng)求中獲取
  overwrite: "",  // 是否允許重寫(xiě)
  secure: "",
  sameSite: "",
  signed: "",
  
}
app.use(session({
  key: "SESSION_ID",
  store: store,
  cookie: cookie
}))
// 處理session
router.get("/session", async (ctx,next) => {
  ctx.session = {
    user_id: Math.random().toString(36).substr(2),
    count: 0
  }
  ctx.response.body = `

session, ${ctx.session.user_id}, ${ctx.session.count}

`; // 輸出cookie值 })
操作mysql

安裝 mysql "mysql":"^2.15.0"

用戶(hù)增、刪、改、查

// 查詢(xún)
async function queryAll(){
    let sql = usersMapping.queryAll;
    let UsersList = await dbUtils(sql);
    return UsersList;
}
// 新增
async function insertUser(username,password,realname){
    let sql = usersMapping.insertUser;
    var values = [username,password,realname]; // 數(shù)組
    let result = await dbUtils(sql,values);
    if ( Array.isArray(result) && result.length > 0 ) {
        result = result[0]
    } else {
        result = null
    }
    return result
}
// 修改
async function queryById(id){
    let sql = usersMapping.queryById;
    let result = await dbUtils(sql,id);
    if ( Array.isArray(result) && result.length > 0 ) {
        result = result[0]
    } else {
        result = null
    }
    return result
}
async function updateUser(id,username,password,realname){
    // 從session中取 id
    let sql = usersMapping.updateUser;
    var values = [username,password,realname,id]; // 數(shù)組
    let result = await dbUtils(sql,values);
    if ( Array.isArray(result) && result.length > 0 ) {
        result = result[0]
    } else {
        result = null
    }
    return result
}
// 刪除
async function deleteById(id){
    let sql = usersMapping.deleteById;
    let flag = await dbUtils(sql,id);
    return flag;
}

github:

https://github.com/lichuang44...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/93104.html

相關(guān)文章

  • vue+koa2+token登陸驗(yàn)證

    摘要:用搭建前端項(xiàng)目用搭建后臺(tái),給前端提供數(shù)據(jù)訪問(wèn)接口項(xiàng)目結(jié)構(gòu)用搭建的項(xiàng)目,紅色框中是新建的文件夾用于存放剩下的文件在寫(xiě)項(xiàng)目中慢慢增加,最初就是這樣的之后將項(xiàng)目跑起來(lái),看一下有沒(méi)有問(wèn)題這里就當(dāng)作沒(méi)有問(wèn)題前端這里選用和搭配這里采用的是的完整 koa2+vue 用vue-cli搭建前端項(xiàng)目 用koa2搭建后臺(tái),給前端提供數(shù)據(jù)訪問(wèn)接口 項(xiàng)目結(jié)構(gòu) showImg(https://segmentf...

    econi 評(píng)論0 收藏0
  • koa源碼閱讀[1]-koa與koa-compose

    摘要:接上次挖的坑,對(duì)相關(guān)的源碼進(jìn)行分析第一篇。和同為一批人進(jìn)行開(kāi)發(fā),與相比,顯得非常的迷你。在接收到一個(gè)請(qǐng)求后,會(huì)拿之前提到的與來(lái)創(chuàng)建本次請(qǐng)求所使用的上下文。以及如果沒(méi)有手動(dòng)指定,會(huì)默認(rèn)指定為。 接上次挖的坑,對(duì)koa2.x相關(guān)的源碼進(jìn)行分析 第一篇。 不得不說(shuō),koa是一個(gè)很輕量、很優(yōu)雅的http框架,尤其是在2.x以后移除了co的引入,使其代碼變得更為清晰。 express和ko...

    vibiu 評(píng)論0 收藏0
  • co源碼分析及其實(shí)踐

    摘要:返回的結(jié)果是一個(gè)對(duì)象,類(lèi)似于表示本次后面執(zhí)行之后返回的結(jié)果。對(duì)象用于一個(gè)異步操作的最終完成或失敗及其結(jié)果值的表示簡(jiǎn)單點(diǎn)說(shuō)就是處理異步請(qǐng)求。源碼分析主要脈絡(luò)函數(shù)調(diào)用后,返回一個(gè)實(shí)例。參考鏈接解釋對(duì)象的用法的源碼及其用法 本文始發(fā)于我的個(gè)人博客,如需轉(zhuǎn)載請(qǐng)注明出處。為了更好的閱讀體驗(yàn),可以直接進(jìn)去我的個(gè)人博客看。 前言 知識(shí)儲(chǔ)備 閱讀本文需要對(duì)Generator和Promise有一個(gè)基本的...

    vincent_xyb 評(píng)論0 收藏0
  • NodeJs爬蟲(chóng)抓取古代典籍,共計(jì)16000個(gè)頁(yè)面心得體會(huì)總結(jié)及項(xiàng)目分享

    摘要:目前這個(gè)爬蟲(chóng)還是比較簡(jiǎn)單的類(lèi)型的,直接抓取頁(yè)面,然后在頁(yè)面中提取數(shù)據(jù),保存數(shù)據(jù)到數(shù)據(jù)庫(kù)。總結(jié)寫(xiě)這個(gè)項(xiàng)目其實(shí)主要的難點(diǎn)在于程序穩(wěn)定性的控制,容錯(cuò)機(jī)制的設(shè)置,以及錯(cuò)誤的記錄,目前這個(gè)項(xiàng)目基本能夠?qū)崿F(xiàn)直接運(yùn)行一次性跑通整個(gè)流程。 前言 之前研究數(shù)據(jù),零零散散的寫(xiě)過(guò)一些數(shù)據(jù)抓取的爬蟲(chóng),不過(guò)寫(xiě)的比較隨意。有很多地方現(xiàn)在看起來(lái)并不是很合理 這段時(shí)間比較閑,本來(lái)是想給之前的項(xiàng)目做重構(gòu)的。后來(lái) 利用這...

    legendmohe 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<