关于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. ajax同步处理(使得JS按顺序执行)

    在项目中碰到一个问题: 图一: 图二: 函数1代码:这里是因为有ajax请求,默认的是异步的 //点击分页页码,请求后台返回对应页码的数据 function getdata(fewPage,flag, ...

  2. rank()函数的使用

    排序: ---rank()over(order by 列名 排序)的结果是不连续的,如果有4个人,其中有3个是并列第1名,那么最后的排序结果结果如:1 1 1 4select scoreid, stu ...

  3. NPOI导出数据,设置格式,锁定单元格

    代码包括: 1:导出多个sheet    2:设置单元格格式   3:合并单元格   4:下拉框选项   5:输入数字限制   6:锁定单元格 static void Main(string[] ar ...

  4. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

  5. 【codeforces 148D】 Bag of mice

    http://codeforces.com/problemset/problem/148/D (题目链接) 题意 包中有w个白鼠,b个黑鼠.公主和龙轮流画老鼠,公主先画,谁先画到白鼠谁就赢.龙每画完一 ...

  6. BZOJ3879: SvT

    后缀数组裸题,每次的查询单调栈扫一遍就完了.为什么要写虚后缀树= =后缀数组不是自带虚树的结构么= = #include<cstdio> #include<algorithm> ...

  7. WKWebView与JavaScript交互基础

    login.html 代码 <!DOCTYPE html> <html> <head> <title>使用JavaScript</title> ...

  8. <<编程之美>>1.2读后有感

    问题提出 中国象棋的"将","帅"问题,他俩不能在一条直线上.求出他们的合法位置,并且只能用一个变量. 分析 一头雾水,不明所以.往下看了下,感觉像是程序员为难 ...

  9. C# 获取磁盘剩余空间

    drive.TotalFreeSpace单位为bit,根据需要除以1024 drive同时可以可以获取磁盘分区容量等 //单位MB public static long GetHardDiskSpac ...

  10. linux 查看文件大小

    ls -lht