Javascript 我可以在另一个控制器中使用控制器吗?

Javascript 我可以在另一个控制器中使用控制器吗?,javascript,node.js,express,controller,server,Javascript,Node.js,Express,Controller,Server,我正在开发一个应用程序,我想在另一个控制器函数中使用一个控制器函数。如何做到这一点?还是不能 用例:如果用户有权限在患者集合中发布其他患者,我想签入用户集合(使用mongoDB)。我想在我的应用程序中实现某种价格计划方法 任何疑问或建议,请评论,我将乐意回答。 多谢各位 用户.控制器: 'use strict'; /** * module dependencies */ const User = require('../models/user'); const Utilities = req

我正在开发一个应用程序,我想在另一个控制器函数中使用一个控制器函数。如何做到这一点?还是不能

用例:如果用户有权限在患者集合中发布其他患者,我想签入用户集合(使用mongoDB)。我想在我的应用程序中实现某种价格计划方法

任何疑问或建议,请评论,我将乐意回答。 多谢各位

用户.控制器:

'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);
    }
}
'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);
    }
}
患者。控制员:

'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);
    }
}
'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);
    }
}
“严格使用”;
/**
*模块依赖关系
*/
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,
岗位:岗位,,
getByNumber:getByNumber,
getByName:getByName
}
/**
*住院后
*@param-id
*/
功能post(请求、恢复、完成){
//检查用户是否有权访问患者
if(请求用户id==请求参数id){
返回Patient.findById({u id:req.params.id},(err,Patient,done)=>{
如果(错误){
Logger.debug(“用户id:%s |错误:%s |查找患者时出错”,req.params.id,err);
返回资源状态(404);
}
var user=UserController.get(req,res);
Logger.debug(“用户id:%s |变量%s”,req.params.id,a);
//如果user.pricePlan.maxPatients{
如果(错误){
Logger.debug(“用户id:%s |错误:%s |保存患者时出错”,req.params.id,err);
返回资源状态(404);
}
Logger.debug(“用户id:%s | patientId:%s | saving patient”,req.params.id,patient._id);
返回res.json(患者);
});
});
}否则{
Logger.debug(“用户id:%s | jwt:%s |未经许可尝试创建患者”,req.params.id,req.headers.authorization);
物质状态(403);
}
}

在我看来,您的
UserController.get()
方法不会返回任何内容。它只发送带有用户JSON的HTTP响应或4xx状态代码。因此,在
patient.controller
中使用它的方式会导致
post
方法过早地向客户端发送响应

我不确定应用程序的其余部分是如何实现的,但您可能希望
考虑编写一个中间件方法,它在<代码> POST <代码>之前被调用,它检查用户是否具有适当的权限。

< P>从我所看到的,您的代码>用户控制器。它只发送带有用户JSON的HTTP响应或4xx状态代码。因此,在
patient.controller
中使用它的方式会导致
post
方法过早地向客户端发送响应

我不确定应用程序的其余部分是如何实现的,但您可能希望
考虑编写一个中间件方法,该方法在<代码> POST <代码>之前被调用,它检查用户是否具有适当的权限。

Shaka谢谢您的帮助。中间件是我试图实现的功能,检查价格计划。但是我正在尝试使用负责用户集合查询的用户控制器..沙卡谢谢你的asnwer。中间件是我试图实现的功能,检查价格计划。但是我正在尝试使用负责用户集合查询的用户控制器。。