创建时从猫鼬模式中排除字段

时间:2020-01-17 14:31:45

标签: node.js mongodb express mongoose

我有这个模式:

const userSchema = mongoose.Schema({
    name: {
        type: String,
        required: true,
        trim: true
    },
    email: {
        type: String,
        required: true,
        unique: true,
        lowercase: true,
        validate: value => {
            if (!validator.isEmail(value)) {
                throw new Error({error: 'Invalid Email address'});
            }
        }
    },
    password: {
        type: String,
        required: true,
        minLength: 7,
        select: false
    },
    tokens: [{
        token: {
            type: String,
            required: true
        },
    }]
});

and controller for creating the user:

const register = async (req, res) => {
    try {
        const user = new User(req.body);
        await user.save();
        const token = await user.generateAuthToken();
        res.status(201).send({user, token});
    } catch(error) {
        res.status(400).send({error});
    }
}

对此,有所有信息,包括密码,这对我来说很危险。这样做的首选方式是什么。我了解dto,但不想在项目中使用它。我不是在查询数据库,所以不能使用排除,选择或其他可以删除密码的方法。

1 个答案:

答案 0 :(得分:2)

您已经有select: false个密码字段选项,因此不会在find方法中检索它。

对于注册中的问题,您可以像这样从用户中删除密码:

    try {
        const user = new User(req.body);
        await user.save();
        const token = await user.generateAuthToken();
        delete user.password;
        res.status(201).send({user, token});
    } catch(error) {
        res.status(400).send({error});
    }