rem+koa写法

199 阅读3分钟

一个线程里有5个task 实现 处理完一个task添加下一个task 的功能

function promise(a) {
    return new Promise(function (res, rej) {
      b = a + 1;
      res(b)
    })
  }
  for (var j = 0; j < 2; j++) {
    promise(j).then(res => console.log(res))
  }

闭包无限调用 foo(1)(3)(4)

  function foo(a) {
    function s(b) {
      a = a + b;
      return s;
    }
    s.toString = function () {
      return a;
    }
    return s;
  }

  console.log(foo(1)(2)(3)(8))

indexOf

  var aa = "abc";
  var bb = 'aaccabcaa';
  var index = -1;
  var a = aa.split('')
  var b = bb.split('')
  b.forEach((v, i) => {
    if (v == a[0]) {
      var ind = i;
      var one = i + 1;
      var two = i + 2;
      if (b[one] == a[1] && b[two] == a[2]) {
        index = i;
      }
    }
  })
  console.log(index)
// server.js

const path = require("path");
const Koa = require("koa");
const app = new Koa();
const cors = require('koa-cors')
const index = require("./router/index");
app.use(cors())
app.use(index.routes(), index.allowedMethods());
app.listen(3000, () => {
  console.log("http://localhost:3000/");
});



// router => index.js
const router = require("koa-router")();
const mysql = require("mysql");
let koaBody = require("koa-body")({ multipart: true });
let db = mysql.createPool({
  host: "地址",
  user: "用户名",
  password: "密码",
  database: "数据库",
  port: "端口"
});
let query = async (sql, values) => {
  return new Promise((reslove, reject) => {
    db.getConnection((err, connection) => {
      if (err) {
        reslove(err);
      } else {
        connection.query(sql, values, (err, rows) => {
          if (err) {
            reject(err);
          } else {
            reslove(rows);
          }
          connection.release();
        });
      }
    });
  });
};

let requestData = ctx => {
  return ctx.request.body;
};


router.post("/task/list", koaBody, async (ctx, next) => { // 查询列表
  if (requestData(ctx).search) {
    let sql = "select * from task where id like ? or title like ? or cate_id like ? or bj_id like ? or intimacy like ? or award_plat_coin_amount like ? or award_bj_coin_amount like ? and cate_id = 1 or cate_id = 2 LIMIT ?,20";
    await query(sql, [`%${requestData(ctx).search}%`, `%${requestData(ctx).search}%`, `%${requestData(ctx).search}%`, `%${requestData(ctx).search}%`, `%${requestData(ctx).search}%`, `%${requestData(ctx).search}%`, `%${requestData(ctx).search}%`, (requestData(ctx).page - 1) * 20]).then(res => {
      ctx.body = { code: 20000, data: { list: res } };
    })
  } else {
    let sql = "select * from task where cate_id = 1 or cate_id = 2 LIMIT ?,20"
    await query(sql, [(requestData(ctx).page - 1) * 20]).then(res => {
      ctx.body = { code: 20000, data: { list: res } };
    })
  }
});

router.post("/task/length", koaBody, async (ctx, next) => { // 查询列表长度
  if (requestData(ctx).search) {
    let sql = "select count(*) from task where id like ? or title like ? or cate_id like ? or bj_id like ? or intimacy like ? or award_plat_coin_amount like ? or award_bj_coin_amount like ? and cate_id = 1 or cate_id = 2";
    await query(sql, [`%${requestData(ctx).search}%`, `%${requestData(ctx).search}%`, `%${requestData(ctx).search}%`, `%${requestData(ctx).search}%`, `%${requestData(ctx).search}%`, `%${requestData(ctx).search}%`, `%${requestData(ctx).search}%`]).then(res => {
      ctx.body = { code: 20000, data: { length: res[0]['count(*)'] } };
    })
  } else {
    let sql = "select count(*) from task where cate_id = 1 or cate_id = 2"
    await query(sql).then(res => {
      ctx.body = { code: 20000, data: { length: res[0]['count(*)'] } };
    })
  }
})

router.post("/task/delete", koaBody, async (ctx, next) => {// 删除
  let sql = "delete from task where id = ?";
  await query(sql, [requestData(ctx).id]).then(res => {
    if (res) {
      ctx.body = { code: 20000, data: '删除成功' }
    } else {
      ctx.body = { code: 20001, data: '删除失败' }
    }
  })
})

router.post("/task/edit", koaBody, async (ctx, next) => { // 更新
  let sql = "update task set title = ?, platform_id = ?, bj_id = ?, intimacy = ?, award_bj_coin_amount = ?, award_plat_coin_amount = ?, start_at = ?, end_at = ? where id = ?";
  try {
    await query(sql, [requestData(ctx).title, requestData(ctx).platform_id, requestData(ctx).bj_id, requestData(ctx).intimacy, requestData(ctx).award_bj_coin_amount, requestData(ctx).award_plat_coin_amount, requestData(ctx).start_at, requestData(ctx).end_at, requestData(ctx).id]).then(res => {
      ctx.body = { code: 20000, data: '修改成功' }
    })
  } catch (error) {
    console.log(error)
  }
})

router.post("/task/add", koaBody, async (ctx, next) => { // 添加
  let sql = "insert into task (title, platform_id, bj_id, intimacy, award_bj_coin_amount, award_plat_coin_amount, start_at, end_at) values (?,?,?,?,?,?,?,?)"
  try {
    await query(sql, [requestData(ctx).title, requestData(ctx).platform_id, requestData(ctx).bj_id, requestData(ctx).intimacy, requestData(ctx).award_bj_coin_amount, requestData(ctx).award_plat_coin_amount, requestData(ctx).start_at, requestData(ctx).end_at]).then(res => {
      ctx.body = { code: 20000, data: '添加成功' }
    })
  } catch (error) {
    console.log(error)
  }
})

rem 原理

概念:

  1. 物理像素(physical pixel) 一个物理像素是显示器(手机屏幕)上最小的物理显示单元,可以理解为我们平时说的分辨率。
  2. 设备独立像素(density-independent pixel) 设备独立像素(也叫密度无关像素),可以认为是计算机坐标系统中得一个点,这个点代表一个可以由程序使用的虚拟像素(比如: css像素),然后由相关系统转换为物理像素,在这里可以理解为我们说的视觉视口的大小;
  3. 设备像素比(device pixel ratio) 物理像素和设备独立像素之间存在着一定的对应关系,这就是接下来要说的设备像素比。
  4. 设备像素比(简称dpr)定义了物理像素和设备独立像素的对应关系,它的值可以按如下的公式的得到: 设备像素比 = 物理像素 / 设备独立像素 // 在某一方向上,x方向或者y方向

设备像素比也是设备生产的时候设置好的,在javascript中,可以通window.devicePixelRatio获取到当前设备的dpr。

<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum=1, user-scalable=no">
</head>

<script>
  !function (n) {
    var e = n.document,
      t = e.documentElement,
      i = 720,
      d = i / 100,
      o = "orientationchange" in n ? "orientationchange" : "resize",
      a = function () {
        var n = t.clientWidth || 320; n > 720 && (n = 720),
          t.style.fontSize = n / d + "px"
      }
    e.addEventListener && (n.addEventListener(o, a, !1)), e.addEventListener("DOMContentLoaded", a, !1)
  }(window)
</script>