我是ExpressJs中的新手和我项目中的模块模式.现在,我被困在如何在另一个控制器中使用创建的控制器功能.请看例子: -
menu.ctrl.js
------------
module.exports.save=function(req,res,next){
//here some logic
//somethings like validate req.body,etc
menu.save(function(err){
if(err) return next(err);
res.json({msg:'menu save'})
})
}
user.ctrl.js
------------
var user=require('./user.model')
var menuCtrl=require('./menu.ctrl')
module.exports.save=function(req,res,next){
//here some logic
user.save(function(err){
if(err) return next(err);
//HERE I WANT TO USE `menuCtrl.save()` function
res.json({msg:'success'});
})
}
Run Code Online (Sandbox Code Playgroud)
将控制器逻辑与模型逻辑分离将允许您重用逻辑并使您的应用程序更易于维护.
这个想法是控制器的目的是格式化输入和输出应用程序,而模型处理实际的数据操作.(这是REST API的典型Rails-like MVC模式)
举个例子:
var menuModel = require('./menuModel');
module.exports.save = function(req, res, next) {
menuModel.save(req.body, function(err) {
if(err) return next(err);
res.json({msg:'menu save'})
});
};
Run Code Online (Sandbox Code Playgroud)
module.exports.save = function(body, callback) {
// Save menu to the DB
menu.save(body, callback);
};
Run Code Online (Sandbox Code Playgroud)
var userModel = require('./userModel');
module.exports.save = function(req, res, next) {
userModel .save(function(err){
if(err) return next(err);
res.json({msg:'success'});
});
}
Run Code Online (Sandbox Code Playgroud)
var menuModel = require('./menuModel');
module.exports.save = function(body, callback) {
// Save user to the DB
user.save(body, function(err, res) {
if (err) return callback(err);
menuModel.save(body, callback);
});
};
Run Code Online (Sandbox Code Playgroud)
经验法则,在控制器中保持尽可能少的业务逻辑.
| 归档时间: |
|
| 查看次数: |
1145 次 |
| 最近记录: |