2017-05-02 65 views
1

我在開發一個應用程序,我想在另一個控制器函數內部使用一個控制器函數。如何才能做到這一點?或者它不能?我可以在另一個控制器內使用控制器嗎?

用例:我想檢查用戶集合(使用mongoDB),如果用戶有權在Patient集合中發佈另一個Patient。我想對我的應用程序實施一些價格計劃方法。

有任何疑問或建議,請評論我會很樂意回答。 謝謝。

user.controller:

'use strict'; 
/** 
* module dependencies 
*/ 
const User = require('../models/user'); 
const Utilities = require('../models/utilities'); 
var errHandler = Utilities.errHandler; 
var validationErr = Utilities.validationErr; 

module.exports = { 
    getAll: getAll, 
    put: put, 
    post:post, 
    deleteUser: deleteUser, 
    updateLastLoginDate: updateLastLoginDate, 
    get: get, 
    patch:patch 
} 
/** 
* GET user 
*/ 
function get(req, res) { 
    if (req.user._id == req.params.id) { 
     return User.findById({ _id: req.params.id }, 'email', (err, user) => { 
      if (err) { 
       return res.status(400); 
      } 
      if (user) { 
       return res.json(user); 
      } else { 
       return res.status(404); 
      } 
     }); 
    } else { 
     res.status(403); 
    } 
} 

patient.controller:

'use strict'; 
/** 
* module dependencies 
*/ 
const Patient = require('../models/patient'); 
const UserController = require('./user.controller'); 
const Utilities = require('../models/utilities'); 
const Logger = require('../config/logger'); 
var errHandler = Utilities.errHandler; 
var validationErr = Utilities.validationErr; 

module.exports = { 
    getAll: getAll, 
    post: post, 
    getByNumber: getByNumber, 
    getByName: getByName 
} 
/** 
* Post patient 
* @param id 
*/ 
function post(req, res, done) { 
    // Check if user has access to the patient 
    if (req.user._id == req.params.id) { 
     return Patient.findById({ _id: req.params.id }, (err, patient, done) => { 
      if (err) { 
       Logger.debug("userId: %s | error:%s | error in finding patient", req.params.id, err); 
       return res.status(404); 
      } 
      var user = UserController.get(req,res); 
      Logger.debug("userId: %s | variable %s", req.params.id, a); 
      // Do if user.pricePlan.maxPatients < patients.count 
      if (patient) { 
       patient.name = req.body.name; 
       patient.email = req.body.email; 
       patient.phoneNumber = req.body.phoneNumber; 
      } else { 
       var patient = new Patient(); 
       patient.name = req.body.name; 
       patient.registeredIn = new Date(); 
       patient.phoneNumber = req.body.phoneNumber; 
       patient.userId = req.params.id; 
      } 

      patient.save((err, patient) => { 
       if (err) { 
        Logger.debug("userId: %s | error:%s | error in saving patient", req.params.id, err); 
        return res.status(404); 
       } 
       Logger.debug("userId: %s | patientId: %s | saving patient", req.params.id, patient._id); 
       return res.json(patient); 
      }); 
     }); 
    } else { 
     Logger.debug("userId: %s | jwt: %s | trying create patient without permission", req.params.id, req.headers.authorization); 
     res.status(403); 
    } 
} 

回答

0

從我所看到的,你UserController.get()方法不返回任何東西。它只是用用戶JSON或4xx狀態碼發送HTTP響應。因此,您在patient.controller中使用它的方式會導致post方法過早地向客戶端發送響應。

我不確定應用程序的其他部分是如何實現的,但您可能想要 考慮編寫一個在post之前調用的中間件方法,該方法檢查用戶是否具有適當的權限。

+0

Shaka謝謝你的好評。中間件是我試圖實施的功能,檢查價格計劃。但我試圖使用負責用戶集合查詢的用戶控制器.. – Ricardo

相關問題