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

資訊專欄INFORMATION COLUMN

learning koa2.x

ygyooo / 2380人閱讀

摘要:路由封裝了和變量傳入將要處理的下一個異步函數由標記的函數稱為異步函數,在異步函數中,可以用調用另一個異步函數,這兩個關鍵字將在中引入。

koa2.x learning 路由 koa-router

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

ctx:封裝了request 和 response變量

next: 傳入將要處理的下一個異步函數

由async標記的函數稱為異步函數,在異步函數中,可以用await調用另一個異步函數,這兩個關鍵字將在ES7中引入。

${ctx.request.url} 輸出 請求的url 地址 ctx.url相當于ctx.request.url,ctx.type相當于ctx.response.type

處理路由器的操作分為:views、 string、 json、 處理get請求、 處理post請求

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請求

var name = ctx.params.name;

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

Hello, ${name}!

`; })
處理post請求

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

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

extends layout

block content
  h1= title
  form(action="/signin" method="post")
    p= "用戶名:"
    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: "用戶信息"
  });
})
// 處理post請求
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開發的一個純JavaScript編寫的模板引擎 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 // 開發環境下
  }
}));
// 模塊
{% extends "base.html" %}
{% block body %} 
No body
{% endblock %} // 循環 {% for msg in data %}

{{ msg }}

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

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

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

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

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

  ctx.response.body = `

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

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

將session存放在MySQL數據庫中 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")

// 配置存儲session
let store = new MysqlSession({
  user: "root",
  password: "",
  database: "test",
  host: "127.0.0.1",
})
let cookie = {
  maxAge: "", // cookie有效時長
  expires: "",  // cookie失效時間
  path: "", // 寫cookie所在的路徑
  domain: "", // 寫cookie所在的域名
  httpOnly: "", // 是否只用于http請求中獲取
  overwrite: "",  // 是否允許重寫
  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"

用戶增、刪、改、查

// 查詢
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]; // 數組
    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]; // 數組
    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...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/93104.html

相關文章

  • vue+koa2+token登陸驗證

    摘要:用搭建前端項目用搭建后臺,給前端提供數據訪問接口項目結構用搭建的項目,紅色框中是新建的文件夾用于存放剩下的文件在寫項目中慢慢增加,最初就是這樣的之后將項目跑起來,看一下有沒有問題這里就當作沒有問題前端這里選用和搭配這里采用的是的完整 koa2+vue 用vue-cli搭建前端項目 用koa2搭建后臺,給前端提供數據訪問接口 項目結構 showImg(https://segmentf...

    econi 評論0 收藏0
  • koa源碼閱讀[1]-koa與koa-compose

    摘要:接上次挖的坑,對相關的源碼進行分析第一篇。和同為一批人進行開發,與相比,顯得非常的迷你。在接收到一個請求后,會拿之前提到的與來創建本次請求所使用的上下文。以及如果沒有手動指定,會默認指定為。 接上次挖的坑,對koa2.x相關的源碼進行分析 第一篇。 不得不說,koa是一個很輕量、很優雅的http框架,尤其是在2.x以后移除了co的引入,使其代碼變得更為清晰。 express和ko...

    vibiu 評論0 收藏0
  • co源碼分析及其實踐

    摘要:返回的結果是一個對象,類似于表示本次后面執行之后返回的結果。對象用于一個異步操作的最終完成或失敗及其結果值的表示簡單點說就是處理異步請求。源碼分析主要脈絡函數調用后,返回一個實例。參考鏈接解釋對象的用法的源碼及其用法 本文始發于我的個人博客,如需轉載請注明出處。為了更好的閱讀體驗,可以直接進去我的個人博客看。 前言 知識儲備 閱讀本文需要對Generator和Promise有一個基本的...

    vincent_xyb 評論0 收藏0
  • NodeJs爬蟲抓取古代典籍,共計16000個頁面心得體會總結及項目分享

    摘要:目前這個爬蟲還是比較簡單的類型的,直接抓取頁面,然后在頁面中提取數據,保存數據到數據庫。總結寫這個項目其實主要的難點在于程序穩定性的控制,容錯機制的設置,以及錯誤的記錄,目前這個項目基本能夠實現直接運行一次性跑通整個流程。 前言 之前研究數據,零零散散的寫過一些數據抓取的爬蟲,不過寫的比較隨意。有很多地方現在看起來并不是很合理 這段時間比較閑,本來是想給之前的項目做重構的。后來 利用這...

    legendmohe 評論0 收藏0

發表評論

0條評論

ygyooo

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<