做个简单的服务器
发布于 2 年前 作者 CarlosRen 2006 次浏览 来自 分享

原因

最近要起个新项目,需求还没到,先着手做些准备工作,撸了一个服务器大概的框架

传送门

https://github.com/CarlosRen/simple

文件结构

WX20170427-171503@2x.png

思考

  • 提供pool和orm两种方式操作数据库
  • 采用 promise + async/await 减少回调
  • 使用jwt作为认证手段
  • 单独建立了一个测试脚本文件夹,对交付结果负责,不单单是一个参数文档
  • 配置文件分离到config.js 方便上线

service的代码

//  service/person.js
var database = require('../base/orm');
var log      = require('../base/logger');

let person = {};

function linker(db){
  return new Promise(function(resolve,reject){
    db.sync(function(err){
      if(err){
        reject(err);
      }else{
        resolve();
      }
    })
  });
}

function finder(db,condition){
  return new Promise(function(resolve,reject){
    if(!condition){
      condition = {}
    }
    db.models.person.find(condition,function(err,rows){
      if(err){
        reject(err);
      }else{
        resolve(rows);
      }
    })
  })
}

function creater(person,db){
  if(!person){
    return Promise.reject("person can't be null");
  }
  return new Promise(function(resolve,reject){
    db.models.person.create(person,function(err,rows){
      if(err){
        reject(err);
      }else{
        resolve(rows);
      }
    });
  });
}

async function create(person){
  let db,results,link,find,create;
  db     = await database;
  link   = linker(db);
  find   = finder(db,{name:person.name});
  create = creater(person,db);

  results = await link.then(function(){
    return find;
  }).then(function(data){
    if(data){
      //输出已经存在
      return Promise.reject('data is exist');
    }else{
      return create;
    };
  }).then(function(rows){
    return { error : null , data : rows , msg : "ok"};;
  }).catch(function(e){
    log.error("error in create service person :" + e );
    return { error : true , data : null , msg : e};
  });
  return results;
}

person.create = create;
module.exports = person;

//  routes/api.js

router.post('/person',function(req,res,next){
  async function getdata(){
    result = await person.create({
      name : "chao",
      surname : "fabulous",
      age : 18,
      male : true,
      continent:"Europe",
      data : null
    });

    res.json({
      success:!result.error ,
      msg:result.msg,
      data:result.data
    });
  }
  getdata();
});

关于项目

  • 欢迎各种argue
  • 想把它做成一个可以被拿来主义的服务器原型
  • 个人思考有限,再扩展可能就是用socket.io封装一个im接口,还有就是有个邮件服务,别的功能没啥想法,欢迎提出更好的建议
  • 感觉还可以有优化的地方,欢迎大家提issue ,更欢迎star
  • 无论您持什么样的态度 , 请您和谐的表达您的观点
回到顶部