Node.js 有问题。邮递注释模式-Mongoose/Typescript

Node.js 有问题。邮递注释模式-Mongoose/Typescript,node.js,typescript,mongoose-schema,mongoose-populate,Node.js,Typescript,Mongoose Schema,Mongoose Populate,我正在创建一个社交媒体应用程序,比如instagram。老实说,这是我第一次使用非关系数据库,所以我的逻辑有一些问题。我无法理解如何保存在架构之间创建关系的ID。我在用户帖子方面没有问题。但是我在发表评论时有一些错误 我留下了部分代码,以便您理解我的问题。 这是我的帖子模式 const postSchema = new Schema({ created: { type: Date }, descripcion:{

我正在创建一个社交媒体应用程序,比如instagram。老实说,这是我第一次使用非关系数据库,所以我的逻辑有一些问题。我无法理解如何保存在架构之间创建关系的ID。我在用户帖子方面没有问题。但是我在发表评论时有一些错误 我留下了部分代码,以便您理解我的问题。 这是我的帖子模式

    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-我的母语):

如何自动存储帖子id,我尝试了使用请求填充,但出现以下错误:

TypeError:无法读取未定义的属性“\u id” at/Users/mari/Desktop/Projects/ionic/fotos server/dist/routes/comentario.js:21:26 在Layer.handle[as 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) at/Users/mari/Desktop/Projects/ionic/fotos server/dist/middleware/autenticacion.js:12:9 在处理和拒绝时(内部/process/task_queues.js:97:5)

你能告诉我哪里是我的错误或者帮我找到更好的方法吗。
如果你能帮助我,我将非常感激

我在Github上创建了一个最小的repo,以演示如何按照需要的方式使用populate

在README.md中,我特别为您概述了一些事情,解释了可能的改进以及问题所在

我觉得有义务说,我是一个业余开发人员,所以请轻视我的观点/工作(可能与专业工程师不同),尽管这应该足以让您开始

作为奖励,我加入了一个控制器->服务->模型设计模式的示例,因为它侧重于解耦表示、业务逻辑和数据访问

我尽量避免实现任何类来保持简单,尽管我个人建议至少研究OOP范式

-如果有任何进一步的帮助和好运,请随时通知我

对于任何遇到类似问题的人来说,工作代码应该是这样的:

export const commentController={
post:async(请求、回复)=>{
const body=请求body;
const{postId,authorId,commentText}=body;
//实现真正的验证逻辑
如果(!postId | | |!authorId | |!commentText){
返回res.status(400).json({
错误:“错误请求”,
});
}
const comment=等待新的注释({
post:posted,
作者:作者:,
内容:评论文本,
}).save();
返回res.status(201.json)({
好的,没错,
注释:等待注释。填充('author')。填充('post')。执行填充(),
});
},
};
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;