关于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文件结构的更多相关文章

  1. Nodejs Express下引入本地文件的方法

    Express的结构如下: |---node_modules------用于安装本地模块.     |---public------------用于存放用户可以下载到的文件,比如图片.脚本文件.样式表 ...

  2. nodejs express下使用redis管理session

    Session实现原理 实现请求身份验证的方式很多,其中一种广泛接受的方式是使用服务器端产生的Session ID结合浏览器的Cookie实现对Session的管理,一般来说包括以下4个步骤: 服务器 ...

  3. nodejs+express Mvc站点

    nodejs+express Mvc站点 像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风 ...

  4. 像asp.net Mvc一样开发nodejs+express Mvc站点

    像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风学了一些,对前端的框架也了解一些,angu ...

  5. 安装nodeJs静态服务器(NodeJs Express MVC 框架)

    安装 NodeJs Express MVC 框架   新建项目文件夹   打开cmd 执行以下操作:   一.使用Express框架 1)安装express3 $: npm install -g ex ...

  6. 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--目录(8/8 完结)

    为什么要做这个 在使用nodejs开发过程中,总是发现需要做很多重复性的体力劳动,且因为自身是服务端程序员出身,感觉有一些服务端好的东西其实可以在nodejs上得到应用并能提高一些开发工作效率. 本系 ...

  7. 【nodejs】让nodejs像后端mvc框架(asp.net mvc )一样处理请求--自动路由篇(1/8)【route】

    文章目录 前情概要 在使用express框架开发的时候,每加一个请求,都在增加一条route请求规则,类似于下面的代码,很烦有木有! app.use('/myroute path', (req, re ...

  8. windows下nodejs express安装及入门网站,视频资料,开源项目介绍

    windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件下载地址: ...

  9. NodeJS平台下的前后端文件共享

    一.前后端文件共享的需要背景——为什么需要共享? 项目基本JS/NodeJS全端开发,有部分代码前后端都需要用得到 有一些配置是在前后端都需要用得到的 区别其他开发平台,NodeJS平台下的前后端文件 ...

随机推荐

  1. Service实时向Activity传递数据案例

    转自 http://www.cnblogs.com/linjiqin/p/3147764.html 演示一个案例,需求如下:在Service组件中创建一个线程,该线程用来生产数值,每隔1秒数值自动加1 ...

  2. spring定时器,定时器一次执行两次的问题

    Spring 定时器 方法一:注解形式 配置文件头加上如下: xmlns:task="http://www.springframework.org/schema/task" htt ...

  3. 基于Dubbo框架构建分布式服务(三)

    我们将上面开发的服务提供方服务,部署到2个独立的节点上(192.168.14.1和10.10.4.125),然后可以通过Dubbo管理中心查看对应服务的状况,如图所示: 上图中可以看出,该服务有两个独 ...

  4. react native 环境配置

    1. 安装Homebrew Homebrew主要用于安装后面需要安装的watchman.flow 打开MAC的终端,输入如下命令: ruby -e "$(curl -fsSL https:/ ...

  5. http://www.cnblogs.com/kissdodog/p/4159176.html

    想要自己一个人完成app,那么后台接口也必须自己动动手.不用担心,其实很简单的,给自己信心!下面就以登录注册为例,做一个api接口 首先在mac上搭建PHP环境,下载 MAMP Pro for Mac ...

  6. PHPCMS调用点击量的方法

    具体方法: 首先:需要在show.html 模板中首先加载jquery.min.js 这个js 其次:需要在要显示点击次数的位置写入: <span>点击:<span id=" ...

  7. Swift3.0变化分享

    Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ...

  8. DX系列之TreeList

    参考资料: DevXpress控件: 第三篇: 将 父子 关系进行到底

  9. 请注意,再次记住, centos7,fedora 24中 没有iptables服务, 而使用的firewalld, 也可以安装 iptables-services程序来实现

    原来写了一篇文章的, 忘了: http://www.cnblogs.com/bkylee/p/5837481.html 可以用 firewall-cmd 这个命令来管理 防火墙...

  10. 一款强大的Android网络渗透软件dsploit

    dSploit是一款基于Android系统的功能十分全面强大的网络渗透工具,可以提供给网络安全工作人员检查网络的安全性.小黑这次主要使用了其中的"简易嗅探""会话劫持&q ...