Я работаю с Express и заполняю несколько схем: Пользователь -> Роль -> Разрешение .Пример: User_1 имеет роль ADMIN и имеет некоторые разрешения: [CREATE_PRODUCT, UPDATE_PRODUCT, DELETE_PRODUCT] Я действительно показал все разрешения пользователя (включая _id, name, ...), но суть в том, что я просто хочу взять толькоимена тех.Я использовал функцию map (), но она не работает.
"express": "^ 4.16.4",
"mongoose": "^ 5.4.20",
маршруты / userAPI.js:
User
.find()
.populate({ path: 'user_role', populate: { path: 'permissions' } })
.exec((err, users) => {
if (err) res.status(500).json(err)
res.status(200).json({
message: 'sucesss',
users: users.map(user => {
return {
user_id: user._id,
user_email: user.email,
user_password: user.password,
user_role: user.user_role.name_role,
user_permissions: user.user_role.permissions.map(permission => permission.action_name)
}
})
})
})
models / user.js:
email: {...},
password: {...},
user_role: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Role',
default: '5cb2d26f7dd8dd437cdbfe32' //Admin's _id
}
models / role.js:
name_role: {type: String},
permissions: [{type: mongoose.Schema.Types.ObjectId, ref: 'Permission'}]
models / allow.js:
action_code : {
type: String,
unique: true
},
action_name : {
type: String
}
Вывод, если не используется map ()
[{
"user_id": "5cb2dcaeca716b2d80665610",
"user_email": "a@a.com",
"user_password": "$2b$10$RWGPv88o4FHCQ.72ELtsUe4eEgzZLJc97EfNPeH74N4Mi9b47h/RW",
"user_role": "Admin",
"user_permissions": [{
"_id": "5cb2ca5674fc4a0f3886c7e0",
"action_code": "1",
"action_name": "CREATE_PRODUCT",
"__v": 0
},
{
"_id": "5cb2cb46ce33eb4978f60d21",
"action_code": "2",
"action_name": "UPDATE_PRODUCT",
"__v": 0
},
{
"_id": "5cb2cb51ce33eb4978f60d22",
"action_code": "3",
"action_name": "DELETE_PRODUCT",
"__v": 0
}
]
}
]
Вывод, который я ожидаю:
[{
"user_id": "5cb2dcaeca716b2d80665610",
"user_email": "a@a.com",
"user_password": "$2b$10$RWGPv88o4FHCQ.72ELtsUe4eEgzZLJc97EfNPeH74N4Mi9b47h/RW",
"user_role": "Admin",
"user_permissions": ["CREATE_PRODUCT, UPDATE_PRODUCT, DELETE_PRODUCT]
}
]