簡體   English   中英

如何使這兩個相似的塊代碼可重用?

[英]How to make these two similar blocks codes reusable?

我有兩個類似的代碼,我認為它可能是可重用的,但不確定從哪里開始。 如果您可以顯示給我和示例,或將我鏈接到一篇文章,那將很好。

我有一個更新用戶信息的塊。

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個不同,它們是字符串。 將它們作為參數傳遞。

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
        });
    });
};

您可以創建通用流程,並綁定特定的參數,如下所示

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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM