Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose getter不适用于阵列_Node.js_Mongoose_Getter - Fatal编程技术网

Node.js Mongoose getter不适用于阵列

Node.js Mongoose getter不适用于阵列,node.js,mongoose,getter,Node.js,Mongoose,Getter,我试图通过Node.js api对mongodb集合进行加密。我所遇到的解决方案似乎在大部分情况下都有效,但对数组/嵌套文档中的任何数据进行解密除外 到目前为止的代码 memberModel.js var mongoose = require('mongoose'), Schema = mongoose.Schema; var crypto = require('crypto'); var connection = mongoose.connection; var memberSchema =

我试图通过Node.js api对mongodb集合进行加密。我所遇到的解决方案似乎在大部分情况下都有效,但对数组/嵌套文档中的任何数据进行解密除外

到目前为止的代码

memberModel.js

var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var crypto = require('crypto');
var connection = mongoose.connection;

var memberSchema = new Schema({
        title: {type: String, trim: true},
        firstname: {type: String, trim: true, get: decrypt, set: encrypt},
        lastname: {type: String, trim: true},
        address: [{
            addressRef: {type: String, trim: true},
            address1: {type: String, trim: true, get: decrypt, set: encrypt},
            postcode: {type: String, trim: true}
        }],
        ...
    }    , { collection: 'memberStage'});

memberSchema.set('toObject', { getters: true });
memberSchema.set('toJSON', { getters: true });

function encrypt(text){
    var cipher = crypto.createCipher('aes-256-cbc', 'test');
    var crypted = cipher.update(text,'utf8','hex');
    crypted += cipher.final('hex');
    return crypted;
};

function decrypt(text){
    if (text === null || typeof text === 'undefined') { return text;};
    var decipher = crypto.createDecipher('aes-256-cbc', 'test');
    var dec = decipher.update(text,'hex','utf8');
    dec += decipher.final('utf8');
    return dec;
};

module.exports = connection.model('memberStage', memberSchema);
member.js

member.find(query, function(err, member){
    res.status(200).json({
        meta : { success: true, message: 'Member Data'},
        data : member
    });
});
在数据库中,firstname和address.address1字段都按预期进行了加密,但是从member.find调用返回的json返回解密的firstname,但address1字段仍然加密

{
    "meta": {
        "success": true,
        "message": "Member Data"
    },
    "data": [
    {
        "_id": "5b1072549378101218c7039c",
        "title": "Mr",
        "firstname": "Test",
        "lastname": "Record",
        "address": [
            {
                "addressRef": "Home",
                "address1": "cfefdf8c4813fac7bcc34d919aa81483",
                "postcode": "PST CDE",
            }
        ]
    }],
    ...
}

在此问题上的任何帮助都将不胜感激。

该地址应定义为一个模式,并对其getter应用相同的
toObject
toJSON
处理方法

var addressSchema = new Schema({
    addressRef: {type: String, trim: true},
    address1: {type: String, trim: true, get: decrypt, set: encrypt},
    postcode: {type: String, trim: true}
})

var memberSchema = new Schema({
        title: {type: String, trim: true},
        firstname: {type: String, trim: true, get: decrypt, set: encrypt},
        lastname: {type: String, trim: true},
        address: [addressSchema],
    }    , { collection: 'memberStage'});

addressSchema.set('toObject', { getters: true });
addressSchema.set('toJSON', { getters: true });

memberSchema.set('toObject', { getters: true });
memberSchema.set('toJSON', { getters: true });

该地址应定义为一个模式,并对其getter应用相同的
toObject
toJSON
处理

var addressSchema = new Schema({
    addressRef: {type: String, trim: true},
    address1: {type: String, trim: true, get: decrypt, set: encrypt},
    postcode: {type: String, trim: true}
})

var memberSchema = new Schema({
        title: {type: String, trim: true},
        firstname: {type: String, trim: true, get: decrypt, set: encrypt},
        lastname: {type: String, trim: true},
        address: [addressSchema],
    }    , { collection: 'memberStage'});

addressSchema.set('toObject', { getters: true });
addressSchema.set('toJSON', { getters: true });

memberSchema.set('toObject', { getters: true });
memberSchema.set('toJSON', { getters: true });