【问题标题】:mongodb not responding after savemongodb保存后没有响应
【发布时间】:2015-08-03 21:30:24
【问题描述】:

我在我的 express.js 项目中使用猫鼬。

这是我的文章模型:

var ArticleSchema = new Schema({

    type: String
    ,title: String
    ,content: String

    ,comments: [{
        type: Schema.ObjectId
        ,ref: 'Comment'
    }]

    ,replies: [{
        type: Schema.ObjectId
        ,ref: 'Reply'
    }]


    ,feedbacks: [{
        type: Schema.ObjectId
        ,ref: 'Feedback'
    }]


    ,meta: {
        tags: [String] //anything
        ,apps: [{
            store: String //app store, google play, amazon app store
            ,storeId: String
        }]
        ,category: String
    }


    , status: String
    ,statusMeta: {
        createdBy: {
            type: Schema.ObjectId
            ,ref: 'User'
        }
        ,createdDate: Date
        , updatedBy: {
            type: Schema.ObjectId
            ,ref: 'User'
        }
        ,updatedDate: Date

        ,deletedBy: {
            type: Schema.ObjectId,
            ref: 'User'
        }
        ,deletedDate: Date

        ,undeletedBy: {
            type: Schema.ObjectId,
            ref: 'User'
        }
        ,undeletedDate: Date

        ,bannedBy: {
            type: Schema.ObjectId,
            ref: 'User'
        }
        ,bannedDate: Date
        ,unbannedBy: {
            type: Schema.ObjectId,
            ref: 'User'
        }

        ,unbannedDate: Date
    }
}, {minimize: false})

这是我的控制器功能

exports.createArticle = function(req, res, next) {

    //1. save article
    var newArticle = new Article()
    newArticle.status = helper.constant.entityStatus.normal
    newArticle.type = req.body.type
    newArticle.category = req.body.category
    newArticle.title = req.body.title
    newArticle.content = req.body.content
    //comments omit
    //replies omit
    //feedbacks omit
    newArticle.meta = req.body.meta
    newArticle.statusMeta.createdBy = req.user
    newArticle.statusMeta.createdDate = new Date
    newArticle.save(function(err) {
        if (err)
            return next(err)

        //2. add article to user
        req.user.articles.push(newArticle)
        req.user.save(function(err) {
            if (err)
                return next(err)

            //3. refetch article, done
            var query = Article.findById(newArticle._id)
            helper.populateCommonFieldsForQuery(query)
            query.exec(function(err, article) {
                if (err)
                    return next(err)
                if (! article)
                    return next(helper.getGeneralError('unable to fetch saved article'))
                return res.json(helper.dataAppendedWithMessage(article.toJSON(), 'success', 'successfully created article'))
            })
        })

    })
}

当我使用meta.tags 创建文章作为空数组时,一切正常。如果标签不为空,则不会触发保存回调 (function(err) {})。

【问题讨论】:

  • 可能这样不好:tags: [String] 是字符串还是数组?它应该是tags: []tags: String,但不能同时使用。
  • 这是一个字符串数组
  • 所以标签:[]就足够了
  • @Michelem [ String ] 是 Mongoose 表示它是一个字符串数组的方式。完全有效。

标签: node.js mongodb express mongoose


【解决方案1】:

保存前写下:

newArticle.markModified('meta');

【讨论】:

    【解决方案2】:

    这是我自己的代码的错误。在helper.js 内部,我使用了helper.functionName() 而不是exports.functionName(),这是未定义的。在 javascript 中很难捕捉到这样的错误

    【讨论】:

      猜你喜欢
      • 2019-09-08
      • 2016-11-16
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 2019-10-21
      • 2012-10-23
      相关资源
      最近更新 更多