如何使这两个相似的块代码可重用?

时间:2015-04-01 21:14:14

标签: javascript node.js express

我有两个类似的代码,我认为它可以重复使用,但不知道从哪里开始。如果你能告诉我我的例子,或者把我链接到一篇没问题的文章。

我有一个更新用户信息的块。

exports.updateUser = function(req, res, next) {
    User.findById(req.params.id, function(err, user) {
        if (err) {
            return next(err);
        }
        user.email = req.body.email || '';
        user.firstname = req.body.firstname || '';
        user.lastname = req.body.lastname || '';

        user.save(function(err) {
            if (err) {
                return next(err);
            }
            req.flash('success', {
                msg: 'User information updated.'
            });
            res.redirect('/users');
        });
    });
};

此块更新了我的用户帐户信息。

exports.updateAccount = function(req, res, next) {
    User.findById(req.user.id, function(err, user) {
        if (err) {
            return next(err);
        }
        user.email = req.body.email || '';
        user.firstname = req.body.firstname || '';
        user.lastname = req.body.lastname || '';

        user.save(function(err) {
            if (err) {
                return next(err);
            }
            req.flash('success', {
                msg: 'Profile information updated.'
            });
            res.redirect('/account');
        });
    });
};

如何进行可重复使用的更新。

2 个答案:

答案 0 :(得分:3)

看起来只有两件不同的东西,它们是字符串。将它们作为参数传递。

exports.updateAccount = function(req, res, next, path, message) { //add 2 parameters
    User.findById(req.user.id, function(err, user) {
        if (err) {
            return next(err);
        }
        user.email = req.body.email || '';
        user.firstname = req.body.firstname || '';
        user.lastname = req.body.lastname || '';

        user.save(function(err) {
            if (err) {
                return next(err);
            }
            req.flash('success', {
                msg: message //message param
            });
            res.redirect(path); //path param
        });
    });
};

答案 1 :(得分:1)

您可以创建一个通用流程,并使用特定参数进行绑定,如下所示

function updateUser(message, url, req, res, next ){

    var body = req.body;

    User.findById(req.params.rid, function(err, user) {
        if (err) {
            return next(err);
        }

        user.email = body.email || '';
        user.firstname = body.firstname || '';
        user.lastname = body.lastname || '';

        user.save(function(err) {
            if (err) {
                return next(err);
            }
            req.flash('success', {
                msg: message
            });
            res.redirect(url);
        });
    });

}

exports.updateUser = updateUser.bind(this, "User information updated.", "/users");
exports.updateAccount = updateUser.bind(this, "Profile information updated.", "/account");