2017-08-28 7 views
0

ユーザーが借りて更新できる書籍ライブラリAPIを作成しています。sequelize.jsで特定のIDを照会して更新するにはどうすればいいですか?

これが本を借りるための私のロジックです:

BorrowBooks(req, res) { 
    Book.findOne({ 
     where: { 
     title: req.body.booktitle, 
     author: req.body.author, 
     } 
    }) 
    .then(book => { 
     if (!book) { 
     res.status(404).send({ 
      message: "Book not found!" 
     }) 
     } else { 
     return Borrower 
      .create({ 
      booktitle: req.body.booktitle, 
      borrowDate: Date.now(), 
      returnDate: null, 
      userId: req.params.userId, 
      }) 
      .then(borrower => { 
      res.status(200).send(borrower) 
      book.update({ 
       count: book.count - 1, 
      }); 
      }) 
      .catch((e) => { 
      return res.status(400).send(e) 
      }) 
     } 
    }); 
}, 

私は、次のしている本を戻すには:

returnBooks(req, res) { 
    Book.findOne({ 
     where: { 
     title: req.body.title, 
     author: req.body.author, 
     } 
    }) 
    .then((book) => { 
     if (!book) { 
     return res.status(400).send({ 
      message: "There is no book like that!" 
     }) 
     } else { 
     book.update({ 
      count: book.count + 1, 
     }) 
     Borrower.findOne({ 
      where: { 
       id: req.params.userId, 
       booktitle: req.body.title, 
      } 
      }) 
      .then((returnedBook) => { 
      returnedBook.update({ 
       returnDate: Date.now() 
       }) 
       .then(() => res.status(200).send({ 
       message: "book successfully returned", 
       returnedBook 
       })) 
      }) 
     } 
    }) 
} 

これは、1冊本のために(私は思う)[OK]を動作しますが、もしユーザーは2冊以上の書籍を借りて返却しようとしますが、動作しません。

借用した本のインスタンスをさらに返すようにするにはどうすればできますか。借りた新しい本の新しいIDをどうやって知ることができますか?

2番目の本を返そうとすると、次のエラーがスローされますか?

Unhandled rejection TypeError: Cannot read property 'update' of null 
    at Borrower.findOne.then (C:\Users\okonjiemmanuel\Desktop\hellobooks\server\controllers\book.js:142:23) 
    at tryCatcher (C:\Users\okonjiemmanuel\Desktop\hellobooks\node_modules\bluebird\js\release\util.js:16:23) 
    at Promise._settlePromiseFromHandler (C:\Users\okonjiemmanuel\Desktop\hellobooks\node_modules\bluebird\js\release\promise. 
js:512: 
+0

誰かが私を助けてください – letmebe

答えて

0

.findAllを使用してみましたか?あなたは、インスタンスモデルまたは生の値を使用したい場合は、あなたには、いくつかのオプションを渡す必要がありますに応じて

http://docs.sequelizejs.com/class/lib/model.js~Model.html#static-method-findAll

Book.findAll({ 
    where: { 
    title: req.body.title, 
    author: req.body.author 
    } 
}) 

。 ie:raw:true

関連する問題