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平台下的前后端文件 ...
随机推荐
- FragmentTabHost简单保存状态的方法
private View rootView;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container ...
- jQuery form表单序列化为JSON对象!
/* 来源于博客园http://www.cnblogs.com/nixil/archive/2010/12/08/1900745.html */ function paramString2obj(se ...
- jQuery 模态对话框示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- <form:select>的使用
最近在学习springMVC,用到了<form:select>标签,使用发过程中遇到了些问题,现在记录下,以防忘记. 我jsp页面是这样的: <%@ page language=&q ...
- iOS推送证书转pem文件
iOS推送证书转 .pem文件. 推送证书转pem文件openssl x509 -in apns_miaobozhibo.cer -inform der -out apns_miaobozhibo.p ...
- linux基本命令
常用命令: w 查看登入用户(第一行为主机负载) ifconfig -a 查看所有网络 dhclient 自动获取IP地址 关机命令 init0 shutdown -h now 重启命令 init 6 ...
- 懒加载(getter\setter理解)
为什么要用懒加载 1.首先看一下程序启动过程:(如图) 会有一个mian的设置,程序一启动会加载main.storyboard main.storyboard又会加载箭头所指的控制器 控制器一旦加载, ...
- Theano printing
Theano printing To visualize the internal relation graph of theano variables. Installing conda insta ...
- js浏览器对象模型(BOM)
浏览器对象模型(Browser Object Model,BOM):浏览器为js提供的对象集合. 1 windows对象 windows对象:表示浏览器的框架以及与其相关的内容,比如滚动条和导航栏图标 ...
- [转]CSS 类名的单词连字符:下划线还是横杠?
问题 CSS 类或 ID 命名时单词间连接通常有这几种写法: 驼峰式: solutionTitle.solutionDetail 用横杠连接: solution-title.solution-deta ...