【问题标题】:MongoDB not saving data [closed]MongoDB不保存数据[关闭]
【发布时间】:2013-07-21 13:08:24
【问题描述】:

我正在用 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
    

当我发出添加新用户的发布请求时,它没有保存任何内容,我想不出任何原因。有任何想法吗?

【问题讨论】:

  • 究竟是什么不起作用。 curl -X POST localhost:3000/user -d "name=MyName&email=test@test.com&phone=123456" 对我有用。新用户存储在 dbs 'temp'、集合 'users' 下的 mongo 数据库中。你如何测试?您有任何错误消息/日志吗?
  • 请在问题中包含相关代码,以便在链接内容更改后它不会失去其价值。我进行了编辑以包含我对“相关”的看法。根据需要进行编辑。

标签: node.js mongodb express mongoose


【解决方案1】:

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

注意:第一个 sn-p 可以简化,这取决于 .save() 是否需要做其他事情:

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

【讨论】:

  • 哦,当然,我显然没想到。非常感谢。
猜你喜欢
  • 2020-03-25
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
相关资源
最近更新 更多