【问题标题】:NodeJS - Mongoose (Object has no method "id")NodeJS - Mongoose(对象没有方法“id”)
【发布时间】:2013-03-04 23:59:25
【问题描述】:

当我在我的应用程序中尝试此代码时:

app/models/Post.coffee

mongoose      = require "mongoose"
CommentModel  = require "./Comment"
Comment       = CommentModel.Schema
Schema        = mongoose.Schema

Post = new Schema {
    title: String,
    slug: {type: String, index: { unique: true, dropDubs: true }},
    content: String,
    author: String,
    tags: [String],
    comments: [Comment],
    created: { type: Date, default: Date.now }
}

Post.statics.findBySlug = (slug, cb) ->
    this.model("Post").findOne({ slug: slug }, cb)

PostModel = mongoose.model "Post", Post

module.exports = PostModel

app/models/Comment.coffee

mongoose  = require("mongoose")
Schema    = mongoose.Schema

Comment = new Schema {
    author: String,
    content: String,
    approved: Boolean,
    created: { type: Date, default: Date.now }
}


CommentModel = mongoose.model "Comment", Comment

module.exports = CommentModel

app/controllers/PostsController.coffee(只有一种方法)

commentDestroy: (req, res, next) ->
    Post.findBySlug req.params.slug, (err, doc) ->
        if (err)
            return next err

        if doc == null
            res.send 404
            return

        doc.comments.id(req.params.comment).remove()
        doc.save (err) ->
            if err
                next err

            res.json doc

以错误结束:

TypeError: Object [object Object],[object Object],[object Object],[object Object],[object Object] has no method 'id'
    at Promise.PostsController.commentDestroy (/home/r41ngoloss/Projects/www/my-express/app/controllers/PostsController.js:88:22)
    at Promise.addBack (/home/r41ngoloss/Projects/www/my-express/node_modules/mongoose/lib/promise.js:128:8)
    at Promise.EventEmitter.emit (events.js:96:17)
    at Promise.emit (/home/r41ngoloss/Projects/www/my-express/node_modules/mongoose/lib/promise.js:66:38)
    at Promise.complete (/home/r41ngoloss/Projects/www/my-express/node_modules/mongoose/lib/promise.js:77:20)
    at Query.findOne (/home/r41ngoloss/Projects/www/my-express/node_modules/mongoose/lib/query.js:1533:15)
    at model.Document.init (/home/r41ngoloss/Projects/www/my-express/node_modules/mongoose/lib/document.js:229:11)
    at model.init (/home/r41ngoloss/Projects/www/my-express/node_modules/mongoose/lib/model.js:192:36)
    at Query.findOne (/home/r41ngoloss/Projects/www/my-express/node_modules/mongoose/lib/query.js:1531:12)
    at exports.tick (/home/r41ngoloss/Projects/www/my-express/node_modules/mongoose/lib/utils.js:408:16)

我已经尝试为我的问题找到解决方案,但我只找到了this,我认为我的模式顺序正确(由 require 提供)。

感谢您的每一个回答。

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

    您收到该错误的原因是您没有在 Post.coffee 文件中正确获取 Comment 架构。当我做你做的事情时,Comment 变量是undefined。将 Post.coffee 文件的顶部修改为:

    mongoose = require "mongoose"
    Comment  = mongoose.model('Comment').schema
    Schema   = mongoose.Schema
    

    现在Comment 变量是Comment 模型的架构。

    【讨论】:

    • 谢谢!这是错误!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2014-12-27
    • 2021-10-06
    相关资源
    最近更新 更多