koa2+mongoose搭建框架模型

因爲學的是java,因此此框架多少有點java的影子,我以爲沒必要排斥語言,只要思想好,全部語言都可以通用。項目分如下幾層php

 

  • app.js項目啓動入口,相似於main函數
  • controller-view層,此層主要處理輸入和輸出,與用戶交互。node裏偏心叫route層,大體指的是同一個東西
    • 若是是傳統的項目,則此層同時包含view+contrller
    • 若是先後端完全分離,則只有controller
    • view單指視圖層,通常是html,asp,jsp,php等
  • service業務邏輯層,此層既不直接操做數據庫,也不接受用戶的輸入。純粹的業務邏輯
  • dao數據持久層,用於直接與數據庫打交道
    • db用於鏈接數據庫操做
    • dbHelper封裝操做數據層crud公共方法
  • pojo數據模型層,即實體類

後端html

app.js前端

const Koa=require ('koa');
const Router = require('koa-router');
const koaBodyparser=require('koa-bodyparser');
const log=require('./util/log');
const app=new Koa();
const router=new Router();
const fs = require("fs");

//鏈接數據庫
require('./dao/db')



//自定義跨域處理中間件,這個沒有封裝爲一個模塊。那個log中間件我封裝了,你能夠對比一下,實際上是同樣的,就是看起來簡潔些
app.use(async (ctx, next) => {
    ctx.response.set('Access-Control-Allow-Origin', '*');
    ctx.response.set('Access-Control-Allow-Methods', '*');
    await next();
});

//加載全部路由
const routeList = fs.readdirSync('./controller/','utf-8');
routeList.forEach(item=> {
    const routeName = item.substring(0,item.lastIndexOf('.'));
    require('./controller/'+routeName)(router);
})

//加載中間件
app.use(koaBodyparser());//調用解析post請求參數的中間件
app.use(log);//調用自定義的日誌打印中間件
app.use(router.routes())//調用路由中間件

//監聽3000端口
app.listen(3000, () => {
    console.log('[myapp]已經運行,端口爲300')
})

 

controller>stuCtr.jsjava

const stuSer=require('../service/stuSer')
module.exports=function (route) {
    route
        .get('/',ctx=>{
            ctx.response.type = 'text/html';
            ctx.response.body='<h1>瞅啥瞅,這是老子的服務器</h1>'
        })

        .post('/getStuList',async ctx=>{
            let param=ctx.request.body;
            let stuList=await stuSer.getStuList();
            ctx.response.type = 'text/json';
            ctx.response.body=stuList
        })
}

 

service>stuSer.jsnode

const stu=require('../dao/dbHelper')('stu');
module.exports={
    getStuList:() => {
        let stuList=stu.queryAll();
        return stuList;
    }
}

 

dao>db.jsjquery

//鏈接數據庫
const mongoose = require('mongoose');
mongoose.connect('mongodb://47.93.52.112/myDb',function (err) {
    if(err){
        console.log('MongoDB 鏈接失敗');
    }else{
        console.log('MongoDB 鏈接成功');
    }
    
});

 

dao>dbHelper.jsgit

module.exports= function (pojoName) {
    //引入model
    const pojo=require('../pojo/'+pojoName);

    //建立通用數據庫查詢方法的對象
    let dbHelper={};
    dbHelper.queryAll =function () {
        let result=pojo.find({});
        return result;
    }
    return dbHelper;
}

 

pojo>stu.jsgithub

const mongoose = require('mongoose');
//建立實體骨架
let stuSchema = mongoose.Schema({
    name: String,
    age:Number
});
//將骨架映射到數據庫表,也就是實體與表之間的映射虛擬模型/類(model)
let stu=mongoose.model('stu',stuSchema);

module.exports=stu;

 

util>log.jsmongodb

//其實中間件就至關於java的過濾器和攔截器,
// 一next函數爲分水嶺,執行路由內的方法
// 前邊爲請求前,能夠修改request數據
// 後邊爲響應後,能夠修改response數據
module.exports=async function (ctx,next) {
    console.log('\n'+'請求信息:----------------start')
    console.log('\n'+'地址:')
    console.log(ctx.request.url)
    console.log('\n'+'參數:')
    console.log(ctx.request.body)
    console.log('\n'+'請求信息:----------------end')
    await next()
    console.log('\n'+'\n'+'\n'+'\n'+'\n'+'返回信息:----------------start')
    console.log('\n'+'返回值:',ctx.response.body)
    console.log('\n'+'返回信息:----------------end')
}

 

package.json數據庫

{
  "name": "after",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "fs": "0.0.1-security",
    "koa": "^2.5.1",
    "koa-bodyparser": "^4.2.0",
    "koa-router": "^7.4.0",
    "mongoose": "^5.0.17"
  }
}

 

前端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div class="wrapp"></div>
    <button>測試</button>
    <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <script>
        let myser={
             getStuList(param) {
                let stuList= $.post('http://localhost:3000/getStuList',param)
                return stuList;
            }
        }

        $('button').click( async function ()  {
            let param={id:123};
            let stuList=await myser.getStuList(param)
            $('.wrapp').text(JSON.stringify(stuList))
        })
    </script>
</body>
</html>

 

 

數據庫

{
    "name" : "丁少華",
    "age" : 20
}

{
    "name" : "王鑫",
    "age" : 21
}

 

 

效果圖

 

github地址

https://github.com/dingshaohua123/koa2Mongoose.git
相關文章
相關標籤/搜索