NodeJS+Express下构建后端MVC文件结构
关于MVC的结构大体上有两种方式,其一按照层级进行文件夹分类,其二是按照业务进行文件夹分类。关于这个demo相关的业务简单,所以暂采用第一种的方式,当然实际当中很恨复杂的项目可以采用两种方式相结合的方式来进行!
不多说费,然后我们具体结构,直接上图:

github地址:https://github.com/FicoHu/nodeserver
nodesv:根目录,作为整个web项目的跟文件夹。
app: 作为整个后端服务的文件夹,我们这次说的重点就是这个文件夹下的结构。
public作为整个项目前端的文件夹,随后的章节再进行说明。
app下4个文件夹:
- controllers,表示控制层
- libs,封装的一些通用模块,例如日志操作模块、文件操作模块等
- model,表示数据层
- routes,表示路由
- views,表示视图。
需要注意一些几点:
关于文件名称,采用 对象名+服务端+层级 的方式进行的命名,例如:doc.server.controller.js,表示服务端的文档模块的控制层文件。
重点说明一下,controller、model、route层里面放置的内容:
doc.server.controller.js,这个模块里面的数据操作进行封装成方法,然后对外进行公开,例如,这个文档模块里面,增加创建、查看列表等方法。
var mongoose = require("mongoose");
var docModel = require("../models/doc.server.model");
module.exports = {
create: function(req, res, next) {
// var docEntity = new docModel(req.body);
var docEntity = new docModel({
title: 'aaa',
type: 'dd',
ext: '.jpg',
size: 1024,
Content: 'dsf ',
created: Date.now(),
creater: 'dsfadf '
});
console.log(docEntity);
docModel.create(docEntity, function(err) {
if (err) return next(err);
return res.json(docEntity);
});
},
getList: function(req, res, next) {
var pagesize = parseInt(req.query.pagesize, 10) || 10;
var pagestart = parseInt(req.query.pagestart, 10) || 1;
console.log(pagesize + " " + pagestart);
docModel.find()
.skip((pagestart - 1) + pagestart)
.limit(pagesize).exec(function(err, results) {
if (err) return next(err);
if (!results) return next(new Error('doc not found'));
return res.json(results);
//return res.json({id:1,name:"dddd"});
});
},
getById: function(req, res, next) {
//if (!did) return next(new Error('did not found'));
console.log( req.params.did);
docModel.findOne({
_id: req.params.did
})
.exec(function(err, results) {
if (err) return next(err);
if (!results) return next(new Error('doc not found'));
return res.json(results);
});
}
};
doc.server.model.js,作为这个模块的数据文件,定义这个模块内容的相关字段。
var mongoose = require("mongoose");
var docSchema = new mongoose.Schema({
title: String,
pid: {
type: mongoose.Schema.Types.ObjectId,
index: true
},
uid: {
type: mongoose.Schema.Types.ObjectId,
index: true
},
type: {
type: Number, //1标识文档,2标识图片,3标识视频,4标识其他
index: true,
default: 0
},
ext: String,
size: {
type: Number, //文件大小,文件夹为0
default: 0
},
content: Buffer,
docurl: String,
status: {
type: Number, //0标识为正常,1标识分享
default: 0
},
isflag: {
type: Number, //0标识为正常,1标识删除
default: 0
},
created: {
type: Date,
default: Date.now
},
creater: {
name: String,
uid: mongoose.Schema.Types.ObjectId
},
updated: {
type: Date,
default: Date.now
},
updater: {
name: String,
uid: mongoose.Schema.Types.ObjectId
}
});
var docModel = db.model("docs", docSchema);
module.exports = docModel;
doc.server.route.js,作为这个模块的路由文件。
var express = require('express');
var docRouter = express.Router();
var docController=require('../controllers/doc.server.controller');
docRouter.get('/getList',docController.getList);
docRouter.get('/create',docController.create);
docRouter.get('/getById/:did',docController.getById);
module.exports = docRouter;
这些文件已经知道具体的作用,拿这些代码是如何一个运行顺序呢?
在web服务启动时,就已经加载了app.js ,需要在appjs里面定义一下路由,
var docRoute = require('./app/routes/doc.server.route.js');
app.use('/doc', docRoute);
1、用户发起请求,http://www.xxxxx.club/doc/getList
2、node server,发现这个app已经设置了doc的路由
3、然后node server,解析docRoute,定位到./app/routes/doc.server.route.js里面到详细。
4、根据详细路由,然后指定控制器里面到具体操作,例如:docRouter.get('/getList',docController.getList);,
5、进入控制器,执行getList操作。
6、若getList操作涉及model层,则调用model层相关数据结构。
6、然后由控制器将数据返回给用户。
这样则是整个mvc到请求过程!
NodeJS+Express下构建后端MVC文件结构的更多相关文章
- Nodejs Express下引入本地文件的方法
Express的结构如下: |---node_modules------用于安装本地模块. |---public------------用于存放用户可以下载到的文件,比如图片.脚本文件.样式表 ...
- nodejs express下使用redis管理session
Session实现原理 实现请求身份验证的方式很多,其中一种广泛接受的方式是使用服务器端产生的Session ID结合浏览器的Cookie实现对Session的管理,一般来说包括以下4个步骤: 服务器 ...
- nodejs+express Mvc站点
nodejs+express Mvc站点 像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风 ...
- 像asp.net Mvc一样开发nodejs+express Mvc站点
像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风学了一些,对前端的框架也了解一些,angu ...
- 安装nodeJs静态服务器(NodeJs Express MVC 框架)
安装 NodeJs Express MVC 框架 新建项目文件夹 打开cmd 执行以下操作: 一.使用Express框架 1)安装express3 $: npm install -g ex ...
- 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--目录(8/8 完结)
为什么要做这个 在使用nodejs开发过程中,总是发现需要做很多重复性的体力劳动,且因为自身是服务端程序员出身,感觉有一些服务端好的东西其实可以在nodejs上得到应用并能提高一些开发工作效率. 本系 ...
- 【nodejs】让nodejs像后端mvc框架(asp.net mvc )一样处理请求--自动路由篇(1/8)【route】
文章目录 前情概要 在使用express框架开发的时候,每加一个请求,都在增加一条route请求规则,类似于下面的代码,很烦有木有! app.use('/myroute path', (req, re ...
- windows下nodejs express安装及入门网站,视频资料,开源项目介绍
windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件下载地址: ...
- NodeJS平台下的前后端文件共享
一.前后端文件共享的需要背景——为什么需要共享? 项目基本JS/NodeJS全端开发,有部分代码前后端都需要用得到 有一些配置是在前后端都需要用得到的 区别其他开发平台,NodeJS平台下的前后端文件 ...
随机推荐
- python基础补漏-06-内置模块
1> sys 模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的 ...
- python3使用pyinstaller打包apscheduler出的错
本来只是想用Python做一个定时任务小工具在服务器上运行,可是服务器在隔离区,各种禁止上外网,使用pip导出列表那种下载库的方法不管用,导致Python的各种库都下不到,官网离线下载又各种缺依赖,好 ...
- Android 样式 (style) 和主题(theme)
转载:https://gold.xitu.io/post/58441c48c59e0d0056a30bc2 样式和主题 样式是指为 View 或窗口指定外观和格式的属性集合.样式可以指定高度.填充.字 ...
- springboot: mybatis集成参考
http://blog.csdn.net/isea533/article/details/50359390
- 统一的Json组件和csv下载组件
java-web-common java-web-common Json组件 目标和用途 规范Json接口格式 Controller中一律返回Java object,组件将自动转换数据格式,满足Jso ...
- 在不损坏C盘的情况下为C盘扩容,适用于Win
2016年12月29日14:29:27 参考原文:http://jingyan.baidu.com/article/90808022a6c6b7fd91c80fc8.html 在不损坏磁盘的情况下给某 ...
- ECC-Elliptic Curves Cryptography,椭圆曲线密码编码学
ECC ECC-Elliptic Curves Cryptography,椭圆曲线密码编码学,是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制.在软件注册保护方面起到很大的作用,一般的序列 ...
- Jenkins 安装FAQ
1.对路径的访问被拒绝,如: 解决办法:以管理员模式进入DOS命令窗口,参考Jenkins安装中的第4步: 2.服务不能启动,提示: 解决办法:启动Windows Service(InstallU ...
- Jmeter插件监控服务器性能
处理利用jmeter实施监控压测时受压机的各项性能 操作步骤: 施压机上的jmeter/lib/ext中放入下载的插件包 jmeter-plugins-perfmon-2.1.jar 受压机上放入Se ...
- 怎么把本地项目和远程git仓库相连通
1. 打开在你的项目文件夹,输入下面的命令 git init 输完上面的命令,文件夹中会出现一个.git文件夹,如下图所示,其他的的文件也会出现蓝色小问号的标志 2. 添加所有文件 git add . ...