如何在Expressjs中制作可重用的功能代码?

时间:2017-02-28 16:55:00

标签: node.js express

我是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'});
   })
}

2 个答案:

答案 0 :(得分:6)

将控制器逻辑与模型逻辑分离将允许您重用逻辑并使您的应用程序更易于维护。

这个想法是控制器的目的是格式化应用程序的输入和输出,而模型处理实际的数据操作。 (这是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);
  });
};

经验法则,在控制器中保持尽可能少的业务逻辑。

答案 1 :(得分:0)

//Here is a solution if you are using same route file
//

var getNotificationSetting = async function (user_id) {
  let params = {}

  params = await NotifcationSetting.findAll({
                                where: { ns_user_id : user_id },
                            });
  return params;
}

//now calling in action
router.get('/', async function(req, res, next) {
  let params = {}
  //for setting section
  params = await getNotificationSetting(req.session.user.user_id);

});