Javascript 多态性节点

Javascript 多态性节点,javascript,node.js,Javascript,Node.js,我用nodeJS开发了一个restfulapi exports.postCreature = function (req, res) { var creature = new Creature({ name: req.body.name, id_user: req.user._id }); creature.save(function (err) { if (err) res.status

我用nodeJS开发了一个restfulapi

    exports.postCreature = function (req, res) {

    var creature = new Creature({
            name: req.body.name, id_user: req.user._id
        });

    creature.save(function (err) {
        if (err)
            res.status(400).send(Error.setError('impossible to save the your creature', err));
        else
            res.status(201).send();
    });
};

//CODE DUPLICATE 
exports.createCreature = function(user, callback) {
    console.log('Creature created');
    var creature = new Creature({
        name: user.username, id_user: user._id
    });

    creature.save(function (err) {
        if (err)
           callback(err, null);
        else
            callback(null, creature);
    });
}
这两个函数执行相同的代码,但参数不同。 我希望避免代码重复


如何避免代码重复?

我将创建另一个函数来处理冗余:

function createCreature (creatureName, user, callback) {
    console.log('Creature created');
    var creature = new Creature({
        name: creatureName, id_user: user._id
    });

    creature.save(function (err, creature) {
        if (err)
           callback(err, null);
        else
            callback(null, creature);
    });
}
然后在其他功能中:

exports.postCreature = function (req, res) {
    createCreature(req.body.name, req.user, function (err, creature) {
        if (err)
            res.status(400).send(Error.setError('impossible to save the your creature', err));
        else
            res.status(201).send();
    };
};

exports.createCreature = function(user, callback) {
    console.log('Creature created');
    createCreature (user.username, user, callback);
}

从您的代码来看,这两个函数的第一个参数都是对象,但具有不同的属性(您可以检查它们的存在),第二个参数是XHR或函数的实例,这将是检测操作的另一种方式。耶!很高兴,我能帮忙!