Вызов функции из другого контроллера в express - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть функция QuestionController

show: function (req, res) {
    var id = req.params.id;
    questionModel.findOne({_id: id}, function (err, question) {
        if (err) {
            return res.status(500).json({
                message: 'Error when getting question.',
                error: err
            });
        }
        if (!question) {
            return res.status(404).json({
                message: 'No such question'
            });
        }
        //var user = userController.show(); 
        return res.render("questions/question", question);
    });
},

И я хочу каким-то образом использовать функцию из userController, чтобы я мог получить пользователя, который разместил вопрос. Это функция, которую я хочу использовать:

show: function (req, res) {
    var id = req.params.id;
    userModel.findOne({_id: id}, function (err, user) {
        if (err) {
            return res.status(500).json({
                message: 'Error when getting user.',
                error: err
            });
        }
        if (!user) {
            return res.status(404).json({
                message: 'No such user'
            });
        }
        return res.json(user);
    });
},

Или есть лучший способ, которым я могу достичь этого? Следует отметить, что я обычно использую базы данных отношений.

Код i wi sh для достижения (более элегантным способом, если это возможно):

//this is a questionController function
show: function (req, res) {
    var id = req.params.id;
    questionModel.findOne({_id: id}, function (err, question) {
        if (err) {
            return res.status(500).json({
                message: 'Error when getting question.',
                error: err
            });
        }
        if (!question) {
            return res.status(404).json({
                message: 'No such question'
            });
        }
        var userID = question.userID;
        //this is a function i copied from userController that i would like to call from userController so it would be a bit more elegant
        userModel.findOne({_id: userID}, function (err, user) {
            if (err) {
                return res.status(500).json({
                    message: 'Error when getting user.',
                    error: err
                });
            }
            if (!user) {
                return res.status(404).json({
                    message: 'No such user'
                });
            }
            question.username = user.username;
            return res.render("questions/question", question);
        });
    });
},

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Мне кажется, я понял, что вы хотите, пожалуйста, дайте мне знать, если все правильно.

Попробуйте это:

Ответ : вы должны использовать mySchema.methods

В том же файле вы определяете свою пользовательскую схему до mongoose.model(...) (т. Е. До компиляции модели):

UserSchema.methods.doYourThing(id){     
     //--------------------------------------------------------
    //this is just the function you had to copy, and want to use   
    this.model("User").findOne({_id: id}, function (err, user) {
        if (err) {
            return res.status(500).json({
                message: 'Error when getting user.',
                error: err
            });
        }
        if (!user) {
            return res.status(404).json({
                message: 'No such user'
            });
        }
        return res.json(user);
    });
},

    }

Затем, когда вам нужно ее использовать, вы может сделать что-то вроде:

const user= mongoose.model("User")
..........
user.doYourThing(userid);

Я сделал код из своей головы (то есть я не проверял его), и у меня нет информации о вашей схеме; вам нужно будет исправить мои опечатки и / или адаптироваться к вашему коду; Я надеюсь, что вы поняли.

Ссылки

0 голосов
/ 06 апреля 2020

Вы должны попытаться импортировать контроллер и затем вызвать функцию;

const userController = require("userController");

userController.show();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...