2013-07-22 3 views
-1

Я делаю приложение с курьерским и мангусты, https://github.com/findjashua/express_appMongoDB не сохранение данных

  • 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 
    

Когда я делаю пост запрос на добавление нового пользователя, он не спасает ничего, и я не могу думать о какой-либо причине почему. Есть идеи?

+0

Что именно не работает. curl -X POST localhost: 3000/user -d "name=MyName&[email protected]&phone=123456" работает для меня. Новый пользователь хранится в базе данных mongo в разделе dbs 'temp', collection 'users'. Как вы тестируете? У вас есть сообщения об ошибках/журналы? – peshkira

+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 
+0

О, конечно, я, очевидно, не думал. Спасибо. – tldr