小白一个,对后端不是很了解,请问在node expressjs中按照MVC的思想,数据库mongoose处理增删修改,应该放在哪里?单独放一个文件夹models里面吗?还是放routes文件夹下?路由器中间件相当于控制器C对吧?。。
在此谢谢了!
小白一个,对后端不是很了解,请问在node expressjs中按照MVC的思想,数据库mongoose处理增删修改,应该放在哪里?单独放一个文件夹models里面吗?还是放routes文件夹下?路由器中间件相当于控制器C对吧?。。
在此谢谢了!
MVC设计
客户端请求一个路由,通过路由转发给控制器,控制器引入models和处理各种业务逻辑,models专门封装对数据的增删查改操作。
路由实例
var users = require("../controllers/users");
var express = require('express');
var router = express.Router();
//用户登录
router.post('/login',users.login);
//找回密码
router.post('/forgotpass',users.updatepass);
//添加地址
router.post('/addaddress',users.addAddress);
module.exports = router;
控制器实例
var User = require('../models/user');
var Address = require('../models/address');
var alidayu = require("../libs/alidayu");
var App = require('alidayu-node');
//获取验证码
exports.register = (req, res, next) =>{
var post = req.body;
var phone = post.phone;
if(!phone.length ==11) res.send(false);
var code = parseInt(Math.random() * 10000+1000);
var data = {
phone:String(phone),
code:String(code)
}
req.session.register = data;
alidayu.dySign(data);
res.status(200);
res.json({code:true,status:true});
}
Models实例
var mongoose = require('mongoose')
var UserSchema = require('../schemas/user');
User = mongoose.model('User', UserSchema);
module.exports = User
schemas 实例
schemas是mongoose对数据结构的定义,对数据操作的方法也可以封装在这里,或者封装在models里面
var mongoose = require('mongoose')
var Schema = mongoose.Schema;
var ObjectId = Schema.Types.ObjectId
var TypeSchema = new Schema({
name:{type:String}, //分类名称
status:{type:String,default:0},//分类状态
father:{ type: ObjectId, ref: 'Type' }, //父类
activity:{type:ObjectId,ref:'Activity'}, //活动
top:{type:Number,default:0},
createAt: {
type: Date,
default: Date.now()
},
updateAt: {
type: Date,
default: Date.now()
}
})
TypeSchema.statics = {
fetch: function(cb) {
return this
.find({status:{"$ne":1}})
.sort('meta.updateAt')
.select()
.exec(cb)
},
findById: function(id, cb) {
return this
.findOne({_id: id})
.exec(cb)
},
shop: function(page, skip,cb) {
return this
.find({status:1})
.limit(page) // 查几条
.skip(skip) //跳过几条
.sort('meta.updateAt')
.exec(cb)
}
}
module.exports = TypeSchema
目录结构大概如下
config
配置文件controllers
控制器libs
第三方SDK 接口 封装目录models
modelspublic
静态资源目录routes
路由schemas
mongoose对数据结构定义,操作方法的封装,但是我觉得是多余的,可以阉割。放进models会更好一点views
视图
我也是nodejs新手,如有不对之处请指出。谢谢!!
5 回答4.8k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
5 回答1.9k 阅读
2 回答1.3k 阅读✓ 已解决
3 回答2k 阅读
1 回答3.2k 阅读
你的增删查改是怎么发起的?往往也是响应用户的一个路由操作吧?小项目可以直接写在路由的处理函数里。比如:
当然这样写稍微有点寒碜,像楼上所说,也可以专门建一个model 文件夹,专门封装对数据的增删查改操作:
把Item.getById 函数导出,就可以直接用了:
这样写的好处是把对数据的增删查改解耦出来;如果有其他路由需要根据id获取数据,也是直接用Item.getById 就可以了。