如何在Expressjs中创build可重用的函数代码?
在我的项目中,我是ExpressJs和模块模式的新手。 现在,我卡住了如何在另一个控制器中使用创build的控制器function。 请看例子:
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'}); }) }
将您的控制器逻辑与您的模型逻辑分离将允许您重用逻辑并使您的应用程序更易于维护。
这个想法是,控制器的目的是格式化input和输出到你的应用程序,而模型处理实际的数据操作。 (这是REST API的典型Rails-like MVC模式)
以你为例:
menuController.js
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'}) }); };
menuModel.js
module.exports.save = function(body, callback) { // Save menu to the DB menu.save(body, callback); };
userController.js
var userModel = require('./userModel'); module.exports.save = function(req, res, next) { userModel .save(function(err){ if(err) return next(err); res.json({msg:'success'}); }); }
userModel.js
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); }); };
经验法则,在控制器中保持尽可能less的业务逻辑。