当前位置: 首页 > 知识库问答 >
问题:

TypeError:无法读取未定义Mongoose的属性“Push”

翁阳曜
2023-03-14

我在Node.js中使用Express做一个应用程序时遇到以下错误。我使用Mongoose进行我的DB操作,下面我详细介绍了我的设计

party.js

var mongoose = require("mongoose");

var partySchema = new mongoose.Schema({
    partyName: String,
    songs: [
         {
                 type: mongoose.Schema.Types.ObjectId,
                ref: "Song"
         }
   ]
});

module.exports = mongoose.model("Party", partySchema);

song.js

var mongoose = require("mongoose");

var songsSchema = new mongoose.Schema({
    videoId: String,
    videoName: String
});

module.exports = mongoose.model("Song", songsSchema);

我的应用程序

app.post("/search/addSong", function(req, res) {
    Party.find({partyName:"hello"},function(err,party){
        if(err){
            console.log("Failed in find");
        } else {
            console.log(party);
            // console.log(typeof(req.body.videoId));
            var videoId = req.body.videoId;

            var newSong = [ {
                videoId:req.body.videoId,
                videoName:req.body.videoName
            }
            ];
            Song.create(newSong, function(err, createdSong){
       if(err){
           console.log("Error creating a new party");
       } else  {
           console.log(createdSong);
           party.songs.push(createdSong);// ERROR ON THIS LINE
           party.save();
           res.redirect("/search");
       }
    });
        }
    });
    res.render("addSong");
});

我可以单独创建聚会和歌曲的集合对象,当我将歌曲添加到聚会队列时,我得到以下错误:

TypeError: Cannot read property 'push' of undefined

谁能告诉我我在这里错过了什么…!!

提前谢谢!!!

共有1个答案

孔逸春
2023-03-14

find返回在数组中转换的游标。如果您需要一个单文档,请调用Findone。

app.post("/search/addSong", function(req, res) {
    Party.findOne({partyName:"hello"},function(err,party){
        if(err){
            console.log("Failed in find");
        } else {
            console.log(party);
            // console.log(typeof(req.body.videoId));
            var videoId = req.body.videoId;

            var newSong = [ {
                videoId:req.body.videoId,
                videoName:req.body.videoName
            }
            ];
            Song.create(newSong, function(err, createdSong){
       if(err){
           console.log("Error creating a new party");
       } else  {
           console.log(createdSong);
           party.songs.push(createdSong);// ERROR ON THIS LINE
           party.save(function(err){
             res.redirect("/search");
           });
       }
    });
        }
    });
    res.render("addSong");
});

同样把redirect放在save的回调中,它会确保只有在save完成时才调用redirect,否则它会在没有save的情况下重定向,给出JavaScript的异步性质。

 类似资料:
  • 如果函数在组件中,那么一切都很好。如果我把它单独取出并导出到一个组件中,那么我会得到一个错误TypeError:不能读取未定义的属性(读取'reduce')

  • 问题内容: 我试图在ajax回调从REST api接收数据后设置组件的setState。这是我的组件构造函数代码 然后,我有一个如下所示的方法。 现在,这是我执行getAJAX请求的getPosts函数。 我想设置状态,但出现以下错误。 不太清楚是什么原因造成的。如果有人指出我正确的方向,那将真的很有帮助。提前致谢。 问题答案: 还绑定回调函数,以便回调内部指向React Component的上下

  • 我试图使用node.js express web服务器中的@tensorflow/tfjs-node模块。但是,我得到了下面的错误。我不明白为什么我会出现这个错误。我刚刚在node.js服务器中添加了1行代码。我使用“npm install@tensorflow/tfjs-node”完成的安装。可能的问题是什么? null 先谢谢你, var nonMaxSuppressionV3Impl=tf.

  • 我正在尝试联系许多对许多,在两个模式“培训和培训课程”,所以我做了第三个模式“课程”,以尝试关系1对许多。但是我得到了一个错误: null TypeError:无法读取对象上未定义得属性“belongsto”。(c:UsersDellDownloadsGraphql-12.18.2020Graphql-12.18.2020Graphql-12.18.2020ServerAppDatabaseDat

  • 上面的函数返回一个类似“failed”的字符串。但是,当我尝试在其上运行then函数时,它将返回 并且光标指示在之后和。 下面是完整的功能: 更新 下面是函数 我确信将导致一个“failed”字符串。没别的了。

  • 无法显示Barchart。 我有一个包含数据的表,它是可拖动的。在表格旁边我有一个两个dropbox被拖动的表格中的数据可以被拖动到框中。当将数据拖动到框中时,应该会显示条形图。 这是我的家。component.html 这是我的家。Component.TS 这是我的酒吧 在拖放数据时,特定的图表必须显示在Dropbox上。