Я пытаюсь внедрить уведомления в свое приложение, но мне сложно понять, как сохранить идентификаторы отправителя и получателя в схеме уведомлений ниже.
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const notificationSchema = mongoose.Schema({
sender: [{
type: Schema.Types.ObjectId,
ref: 'user'
}],
receiver: [{
type: Schema.Types.ObjectId,
ref: 'user'
}],
seen: {
type: Boolean
},
notificationMessage: {
type: String
},
created: {
type: Date
}
})
const Notifications = mongoose.model('notification', notificationSchema);
module.exports = Notifications;
У меня есть контроллер, который пытается создать новое уведомление ниже
const User = require('../models/User');
const Notification = require('../models/Notification');
module.exports = {
getNotifications: async (req, res, next) => {
const { _id } = req.params;
const user = await User.findById(_id).populate('notification');
console.info('user', user)
res.status(200).json(user.notifications);
},
createNotification: async (req, res, next) => {
const { _id } = req.params;
const newNotification = new Notification(req.body);
console.info('newNotification', newNotification);
const user = await User.findById(_id);
newNotification.user = user;
await newNotification.save();
let sender = new User({id: user._id});
newNotification.sender.push(sender);
let receiver = new User({id: user._id});
newNotification.receiver.push(receiver);
await user.save();
res.status(201).json(newNotification);
}
}
Проблема в том, что как только я пытаюсь создать уведомление, ничего не сохраняется, схема уведомления возвращается с этим.
newNotification { sender: [], receiver: [], _id: 5bd1465d08e3ed282458553b }
Я не совсем уверен, как я могу сохранить идентификатор пользователя в соответствующих ссылках в схеме уведомлений, есть ли идеи о том, что я могу сделать, чтобы это исправить?
Обновлено: изменил createNotification
Вы пытаетесь сохранить ObjectId
в массиве, но добавление всего объекта user
и схемы мангуста не позволяет использовать поля, которые не определены в схеме, поэтому измените newNotification.sender.push(user._id)
в функции createNotification
.
это потому, что раньше я пропустил добавление sender
перед нажатием. Попробуйте обновить ответ как для отправителя, так и для получателя.
Просто измените имя Переменная, когда данные подтолкнуть пользователя в уведомление
let sender = new User({id: user._id, name: user.name}):
newNotification.sender.push(sender); //for store sender
let reciever = new User({id: user._id, name: user.name}):
newNotification.receiver.push(reciever); //for store reciever
Только что попробовал, но поля отправителя и получателя все еще пусты. Могу ли я еще чем-нибудь помочь? Спасибо
@Sharkows Abel Plz, попробуйте, мой обновленный ответ может вам помочь
Итак, теперь схема уведомлений сохраняет идентификаторы отправителя и получателя, но в схеме пользователя поле уведомлений все еще пусто, и я получаю Тип: Ошибка Не удается прочитать свойство id, равное null. Есть идеи, что могло случиться? Спасибо, что оставались со мной так долго
не могли бы вы представить, что у вас есть изменения?
Отредактированный пост с вашими изменениями
Не могли бы вы уточнить немного подробнее? Я изменил user.notification.push (newNotification) на то, что вы предложили, но теперь я получаю (node: 10092) UnhandledPromiseRejectionWarning: TypeError: невозможно прочитать свойство 'push' неопределенного