这是一个基于express实现的二次封装框架,目的在于帮助开发人员快速搭建可使用的web应用
(框架亮点:程序员只需专注业务操作即可,其他框架自动处理,省时省力)
- 将项目克隆到本地环境(由于改项目还未封装完善,所以暂时没有放到npm仓库中)
- 安装babel编译器,可输入如下指令进行安装(默认系统已经配置好node环境)
- 将克隆下来的项目安装依赖文件
- 到当前项目执行npm install指令,系统自动将项目需要依赖的文件下载到node_modules文件夹中,依赖的文件(js)在package.json中有列明
- 安装mongodb(本项目暂时使用的是mongodb,后期会适应更多的数据库)
打开项目根目录的sys->appConfig.json文件,配置数据库信息和appInfo信息
(appInfo信息暂时只有scanPackages,这个属性是指系统中要扫描作为主要业务提供的包)
node app.js / supervisor app.js
如果有装supervisor的话 建议使用supervisor启动
####1.快速创建一个模块功能 eg.以学生为例子,学生拥有姓名,性别,学号等属性
//在models中声明实体
/**
* 学生实体类
* Created by dapaer on 16/11/06.
*/
//获取schemaHepler工具类
const schemaHelper = require("../utils/schemaHelper");
//包装student的属性
const studentScheMa =schemaHelper.initSchema({
name: String,
sex:String,
sNo:String
});
//暴露接口
exports.students = schemaHelper.model('student', studentScheMa); // 与student集合相关联
/*系统在此处为他创建5个方法(后面有更详细的操作方式)
1 .saveEntity//保存实体
2.findByCondition//通过条件查询
3.findPageByCondition//通过条件分页查询
4.queryById//通过id查询
5.updateEntity//更新实体
6.countByParam//根据条件统计个数
7.deleteEntity//根据条件删除实体
*/
####2.实现CRUD操作 基于一开始在sys->appConfig.json配置好的scanPackage的文件夹中创建业务逻辑处理类(可根据个人喜好配置不同的路径,个人喜欢命名为business或service) 首先我们创建改业务操作类,并根据业务需要实现CRUD方法
/**
* 学生业务操作类
* Created by dapaer on 16/11/06.
*/
//引入student实体
var students = require('../models/student').students;
var service = {
//保存实体
saveEntity:function(req,res,param){
students.saveEntity({
name: param.name,
sex:param.sex,
sNo:param.sNo
}).then((data)=>res.send(global.configResult(data)));
/*es5:
.then(function(data){
res.send(global.configResult(data));
});
*/
/*返回对象说明:返回统一调用res.send(global.configResult(xxx))
global.configResult 会自动将传入的对象配置进一个结果对象中,
其中包含几个属性
1.success代表是否成功(有异常则系统自动置为false,前台可以统一控制,根据这个字段是否为false,弹出提示)
2.message(返回操作的详细信息,一般常用于错误的时候使用,例如系统抛掷异常为空指针,success置为false,message自动置为系统错误,此时可全局控制
若success为false,系统弹出提示框内容为message)
3.obj传入的对象会自动被包装在obj属性中
*/
},
//根据条件查询
query:function(req,res,param){
students.findByCondition(param).then(function(data){
res.send(global.configResult(data));
});
},
// 根据条件分页查询(系统会自动传入分页参数为第四个参数)
queryByPage:function(req,res,param,page){
students.findPageByCondition(param,page).then(function(data){
res.send(global.configResult(data));
});
},
//根据条件删除实体
delete:function(req,res,param){
students.deleteEntity(param).then(function(data){
res.send(global.configResult(data));
});
},
//根据id更新实体
update:function(req,res,param){
students.updateEntity({_id:param._id},{
name: param.name,
sex:param.sex,
sNo:param.sNo
}).then(function(data){
res.send(global.configResult(data));
});
}
}
module.exports = service;
到此为止CRUD已经完全实现 ####3.执行方法与解惑 说明:所有的接口都是通过restful的风格,访问方式暂时固定(后期可自行设定)为/server/业务处理类的驼峰式名称!方法名 eg.调用保存实体的方法/server/studentService!saveEntity
###最后
- 前端的框架暂时配置的是一个ng1的框架,近期会变更为ng2。
- 后期会将开发一个完整的模块功能,从前端到后台到发布生产和性能调优等教程写在本人的博客,欢迎关注简书:dapaer
- 本框架会继续完善坚持每周都有一个迭代的版本,欢迎大家提issue,也同样环境大家fork一起开发。