MongoDB没有保存数据

时间:2013-07-22 17:24:49

标签: node.js mongodb express mongoose

我正在使用express和mongoose制作应用,https://github.com/findjashua/express_app

  • app.coffee

    app.post '/user', user.add
    
  • models/user.coffee

    createUser = (req) ->
        user = new User
            name : req.body.name
            email : req.body.email
            phone : req.body.phone
        return user
    
    # ...
    
    exports.add = (req, res) ->
        user = createUser req
        res.send dbService.save(user)
    
  • services/db.coffee

    exports.save = (document)->
        document.save (err)->
            if err
                console.log err
            return document
    

当我发布添加新用户的帖子请求时,它不会保存任何内容,我想不出任何理由。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

document.save()是异步的,因此return中的dbService.save()实际上不是一个选项。

  • 在评估res.send()之前,return document已经完成。
  • 它还会将document返回给调用回调的代码,该回调位于document.save内,而不是user.coffee内的代码。

您需要调整dbService.save()以接受回调,以便res.send()完成document

exports.save = (document, callback) ->
    document.save (err, document) ->
        if (err)
            callback(err)
        else
            callback(null, document)
exports.add = (req, res) ->
    user = createUser req
    dbService.save user, (err, user) ->
        res.send err ? user

注意:第一个代码段可以简化,具体取决于.save()是否需要执行其他操作:

exports.save = (document, callback) ->
    document.save callback