javascript - 我可以在另一个 Controller 中使用一个 Controller 吗?

标签 javascript node.js express controller server

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

用例:我想检查用户集合(使用 mongoDB),如果用户有权在患者集合中发布另一个患者。我想对我的应用程序实现某种价格计划方法。

有任何疑问或建议,请评论我很乐意回答。 谢谢。

用户. 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);
    }
}

患者. 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);
    }
}

最佳答案

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

我不确定您的应用程序的其余部分是如何实现的,但您可能想要 考虑编写一个在 post 之前调用的中间件方法,以检查用户是否具有适当的权限。

关于javascript - 我可以在另一个 Controller 中使用一个 Controller 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43742745/

相关文章:

javascript - 如何在 sailsjs 中获取文档根目录?

json - 使用 Express 和 Mongo 使用递归表制作节点树

javascript - 使用按钮更改矩形高度

javascript - 为什么 d3.json 返回 "null"?

javascript - 在 PostgreSQL 中存储 Javascript 数字的最佳方式是什么

node.js - mongodb不会从nodejs启动

javascript - NodeJS,Express,我为什么要使用 app.enable ('trust proxy' );

javascript - 单击时向此元素添加一个简单的类,并从其他元素中删除类

Javascript 前瞻问题!

javascript - 从客户端到服务器上的真实路径的虚拟路径