From fcedcbba6f683a472fec0925bea2f3ac5e993882 Mon Sep 17 00:00:00 2001 From: theluyuan <1162963624@qq.com> Date: Fri, 16 Apr 2021 08:54:48 +0800 Subject: [PATCH] first commit --- .gitignore | 2 + README.md | 4 + app.js | 23 +++++ bin/mongodb.js | 205 +++++++++++++++++++++++++++++++++++++++++++ bin/router.js | 47 ++++++++++ controllers/index.js | 7 ++ package.json | 18 ++++ 7 files changed, 306 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 app.js create mode 100644 bin/mongodb.js create mode 100644 bin/router.js create mode 100644 controllers/index.js create mode 100644 package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..97008e5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +yarn.lock \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..510686b --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# 我的koa模板 +- bin 基础依赖 +- cmntroller 路由文件地址 +- app.js 入口文件 \ No newline at end of file diff --git a/app.js b/app.js new file mode 100644 index 0000000..b29d97e --- /dev/null +++ b/app.js @@ -0,0 +1,23 @@ +const Koa = require("koa"); +const requter = require("./bin/router.js"); +dbs = require("./bin/mongodb.js")('mongodb://localhost:27017/myblog',"wecatdemo") +// console.log(requter) +// import requter from "./bin/router" +const app = new Koa(); +app.use(async (ctx,next)=>{ + // await next(); + console.log(ctx.url) + // console.time("asd") + // ctx.response.body = {a:1}; + await next() + // console.log("执行") + // console.timeEnd("asd") +}); + + +const bodyParser = require('koa-bodyparser'); +app.use(bodyParser()); +// console.log(requter()) +app.use(requter()); +app.listen(3002); +console.log("http://localhost:3002") \ No newline at end of file diff --git a/bin/mongodb.js b/bin/mongodb.js new file mode 100644 index 0000000..1737faf --- /dev/null +++ b/bin/mongodb.js @@ -0,0 +1,205 @@ +var MongoClient = require('mongodb').MongoClient; +var dburl; +let idadd = async (set) => { + let id = 0 + if (set == "idadd") { + return 0; + } else { + await find('idadd', { 'set': set }).then((res) => { + if (res.data.length != 0) { + id = res.data[0].num_key + } else { + id = 1 + } + }) + } + + if (id == 1) { + await add('idadd', { set, 'num_key': 2 }) + } else if (set != "idadd") { + console.log(id) + + await update('idadd', { 'set': set }, { 'num_key': id + 1 }) + } + console.log(id) + return id + +} +let add = async (set, data, url = dburl) => { + if (set != "idadd") { + let id = await idadd(set) + data.num_key = id + } + + return new Promise((resolve, reject) => { + + MongoClient.connect(url.url, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) { + if (err) throw err; + var dbo = db.db(url.dbname); + try { + dbo.collection(set).insertOne(data, function (err, res) { + if (err) throw err; + db.close(); + resolve({ code: 0 ,msg:"添加成功"}); + }); + } catch (error) { + reject({ code: 1, error }) + } + + }); + }) +} +let adds = async (set, data, url = dburl) => { + + if (set != "idadd") { + for (let i in data) { + let id = await idadd(set) + data[i].num_key = id + } + } + return new Promise((resolve, reject) => { + + MongoClient.connect(url.url, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) { + if (err) throw err; + var dbo = db.db(url.dbname); + try { + dbo.collection(set).insertMany(data, function (err, res) { + if (err) throw err; + db.close(); + resolve({ code: 0, num: res.insertedCount }); + }); + } catch (error) { + reject({ code: 1, error }) + } + + }); + }) +} +let remove = async (set, where, url = dburl) => { + return new Promise((resolve, reject) => { + MongoClient.connect(url.url, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) { + if (err) throw err; + var dbo = db.db(url.dbname); + try { + dbo.collection(set).deleteOne(where, function (err, obj) { + if (err) throw err; + db.close(); + resolve({ code: 0 }); + }); + } catch (error) { + reject({ code: 1, error }) + } + + }); + }) +} +let removes = async (set, where, url = dburl) => { + return new Promise((resolve, reject) => { + if (where == "" || Object.keys(where).length == 0) { + reject({ code: 1 }) + } + MongoClient.connect(url.url, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) { + if (err) throw err; + var dbo = db.db(url.dbname); + try { + dbo.collection(set).deleteMany(where, function (err, obj) { + if (err) throw err; + db.close(); + resolve({ code: 0, num: obj.result.n }); + }); + } catch (error) { + reject({ code: 1, error }) + } + + }); + }) +} +let find = async (set, where = {}, page = 0, num = 0, url = dburl) => { + return new Promise((resolve, reject) => { + if (num == 0) { + MongoClient.connect(url.url, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) { + if (err) throw err; + var dbo = db.db(url.dbname); + try { + dbo.collection(set).find(where).toArray(function (err, result) { + if (err) throw err; + resolve({ code: 0, data: result }); + db.close(); + }); + } catch (error) { + reject({ code: 1, error }) + } + + }); + } else { + MongoClient.connect(url.url, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) { + if (err) throw err; + var dbo = db.db(url.dbname); + try { + dbo.collection(set).find(where).skip(num * page).limit(num).toArray(function (err, result) { + if (err) throw err; + resolve({ code: 0, data: result }); + db.close(); + }); + } catch (error) { + reject({ code: 1, error }) + } + + }); + } + + }) +} +let update = async (set, where = {}, data, defin = true, url = dburl) => { + return new Promise((resolve, reject) => { + MongoClient.connect(url.url, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) { + if (err) throw err; + var dbo = db.db(url.dbname); + if (defin) { + data = { $set: data } + } + try { + dbo.collection(set).updateOne(where, data, function (err, res) { + if (err) throw err; + resolve({ code: 0 }); + db.close(); + }); + } catch (error) { + reject({ code: 1, error }) + } + + }); + }) +} +let updates = async (set, where = {}, data, url = dburl) => { + return new Promise((resolve, reject) => { + MongoClient.connect(url.url, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) { + if (err) throw err; + var dbo = db.db(url.dbname); + data = { $set: data } + try { + dbo.collection(set).updateMany(where, data, function (err, res) { + if (err) throw err; + db.close(); + resolve({ code: 0, num: res.result.nModified }); + }); + } catch (error) { + reject({ code: 1, error }) + } + + }); + }) +} + +module.exports = function (url, dbname) { + dburl = { url, dbname }; + return { + add, + adds, + remove, + find, + update, + updates, + removes + } +} \ No newline at end of file diff --git a/bin/router.js b/bin/router.js new file mode 100644 index 0000000..7cad897 --- /dev/null +++ b/bin/router.js @@ -0,0 +1,47 @@ +const fs = require("fs") +const os = require('os'); + +function addMapping(router, mapping) { + for (var url in mapping) { + if (url.startsWith('GET ')) { + var path = url.substring(4); + router.get(path, mapping[url]); + // console.log(`register URL mapping: GET ${path}`); + } else if (url.startsWith('POST ')) { + var path = url.substring(5); + router.post(path, mapping[url]); + // console.log(`register URL mapping: POST ${path}`); + } else { + console.log(`invalid URL: ${url}`); + } + } +} + +function addControllers(router, controllers_dir) { + let ostype = os.type() == "Windows_NT" + let dir; + if (ostype) { + dir = __dirname.replace("\\bin", "") + } else { + dir = __dirname.replace("/bin", "") + } + + var files = fs.readdirSync(dir + "/" + controllers_dir); + var js_files = files.filter((f) => { + return f.endsWith('.js'); + }); + + for (var f of js_files) { + // console.log(`process controller: ${f}...`); + let mapping = require(dir + `/${controllers_dir}/` + f); + addMapping(router, mapping); + } +} +module.exports = function (dir) { + let + controllers_dir = dir || 'controllers', // 如果不传参数,扫描目录默认为'controllers' + router = require('koa-router')(); + addControllers(router, controllers_dir); + return router.routes(); + // return 1; +}; diff --git a/controllers/index.js b/controllers/index.js new file mode 100644 index 0000000..2cf9dc0 --- /dev/null +++ b/controllers/index.js @@ -0,0 +1,7 @@ +let index = async (ctx,next)=>{ + ctx.body = "" +} + +module.exports = { + "GET /":index +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..38cbd75 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "wecat-serve-demo", + "version": "1.0.0", + "main": "index.js", + "repository": "http://git.luyuan.tk/pplokijuhyg/wecat-serve-demo.git", + "author": "pplokijuhyg <1162963624@qq.com>", + "license": "MIT", + "scripts": { + "start": "node app.js" + }, + "dependencies": { + "fs": "^0.0.1-security", + "koa": "^2.11.0", + "koa-bodyparser": "^4.2.1", + "koa-router": "^7.4.0", + "mongodb": "^3.3.5" + } +}