Я создаю приложение для социальных сетей, что-то вроде Instagram. Честно говоря, я впервые работаю с нереляционной базой данных, поэтому у меня возникли проблемы с моим logi c. Я не могу понять, как вы сохраняете идентификаторы, которые создают связь между схемами. У меня не было проблем с пользовательским постом. Но у меня есть некоторые ошибки с Post - Comment. Я оставляю части своего кода, чтобы вы могли понять мою проблему. Это моя схема сообщений
const postSchema = new Schema({
created: {
type: Date
},
descripcion:{
type: String,
required: [true, 'Cada prenda debe ser descrita']
},
img: [{
type: String
}],
user: {
type: Schema.Types.ObjectId,
ref: 'Usuario',
required: [true, 'Debe existir una referencia a un usuario']
},
comment: [{
type: Schema.Types.ObjectId,
ref: 'Comentario'
}]
});
interface IPost extends Document{
created: Date;
descripcion: string;
img: string[];
cords: string;
user: string;
comment: string;
}
Это моя схема комментариев:
const comentarioSchema = new Schema({
created: {
type: Date
},
autor: {
type: Schema.Types.ObjectId,
ref: 'Usuario',
required: [true, 'Debe existir una referencia a un usuario']
},
contenido: {
type: String,
required: [true, 'No se aceptan comentarios vacios']
},
post:{
type: Schema.Types.ObjectId,
ref: 'Post',
required: [true, 'Debe existir una referencia al post al que este comentario pertenece']
}
});
interface IComentario extends Document{
created: Date;
autor: string;
contenido: string;
post: string;
}
Наконец, вот в чем проблема. У меня есть файл под названием Comment.ts (Comentario.ts - На моем родном языке):
import { Router, Response } from "express";
import { verificaToken } from '../middlewares/autenticacion';
import { Comentario } from '../models/comentario.model';
const comentarioRoutes = Router();
comentarioRoutes.post('/',[verificaToken], (req:any, res: Response)=> {
const body = req.body;
body.autor = req.usuario._id;
body.post = req.post._id;
Comentario.create(body).then( async comentarioDB => {
await comentarioDB.populate('usuario','-password').populate('post').execPopulate();
res.json({
ok:true,
comentario: comentarioDB
});
}).catch(err=> {
res.json(err)
});
});
export default comentarioRoutes;
Как я могу автоматически сохранить идентификатор сообщения, я пытался заполнить, используя запрос, но получаю эту ошибку :
TypeError: Невозможно прочитать свойство '_id' неопределенного значения в /Users/mari/Desktop/Projects/ionic/fotos-server/dist/routes/comentario.js:21:26 в Layer.handle [как handle_request] (/Users/mari/Desktop/Projects/ionic/fotos-server/node_modules/express/lib/router/layer.js:95:5) в следующем (/ Users / mari / Desktop / Projects / ionic / fotos-server / node_modules / express / lib / router / route. js: 137: 13) в /Users/mari/Desktop/Projects/ionic/fotos-server/dist/middlewares/autenticacion.js: 12: 9 в processTicksAndRejection (internal / process / task_queues. js: 97: 5)
Не могли бы вы указать мне, в чем моя ошибка, или помочь мне найти лучший подход. Буду очень признателен, если вы мне поможете!