如何将创建的联系人分配给 Mongoose 中的当前用户?
Posted
技术标签:
【中文标题】如何将创建的联系人分配给 Mongoose 中的当前用户?【英文标题】:How do I assign a created contact to the current user in Mongoose? 【发布时间】:2018-08-04 14:50:57 【问题描述】:我正在尝试创建一个推送到当前用户的联系人数组的联系人。
我的控制器目前只创建一个一般性的联系人,而不是特定于用户。
控制器:
function contactsCreate(req, res)
Contact
.create(req.body)
.then(contact => res.status(201).json(contact))
.catch(() => res.status(500).json( message: 'Something went wrong'));
联系模特:
const contactSchema = new Schema(
firstName: String,
lastName: String,
email: String,
job: String,
address: String,
number: Number
);
用户模型:
const userSchema = new mongoose.Schema(
username: type: String, unique: true, required: true ,
email: type: String, unique: true, required: true ,
passwordHash: type: String, required: true ,
contacts: [ type: mongoose.Schema.ObjectId, ref: 'Contact' ]
);
【问题讨论】:
这取决于您如何进行身份验证。您是否可以访问护照中请求的用户信息? 我相信是的,我使用的是 express-jwt 和 bcrypt 【参考方案1】:假设您可以访问请求对象上的用户名,这样的事情应该可以工作:
async function contactsCreate(req, res)
const username = request.User.username
try
const newContact = await Contact.create(req.body)
const user = await User.findOne(username)
user.contacts.push(newContact)
await user.save()
return res.status(201).json(contact)
catch ( err )
return res.status(500).json( message: 'Something went wrong')
【讨论】:
非常感谢,我在下面稍微调整了你的答案【参考方案2】:感谢上面的 LazyElephant。解决方案(调整)是:
async function contactsCreate(req, res)
const userId = req.user.id;
try
const newContact = await Contact.create(req.body);
const user = await User.findById(userId);
user.contacts.push(newContact);
await user.save();
return res.status(201).json(newContact);
catch ( err )
return res.status(500).json( message: 'Something went wrong');
【讨论】:
以上是关于如何将创建的联系人分配给 Mongoose 中的当前用户?的主要内容,如果未能解决你的问题,请参考以下文章
mongoose-mpath 模块正在创建文档但未分配给它的父级
如何将 promise 对象中返回的 JSON 对象分配给全局变量?