Angular-FullStackで$http.putしても更新が出来ない問題

  • 3
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Angular-FullStackは現在もissue等で活発にやりとりが行われ,更新が続けられています,そんな中で,日本語のドキュメントには起こされていない問題もあるようです.たまたまそんな中の1件を発見したので,メモとして.

表題の問題について

Angular-FullStackはgeneratorで,MEANスタックに則ったコードを自動生成してくれます,ModelやView,Controllerもひと通り自動的に生成してくれるので,ユーザーは処理を考えるだけです.

さて,AngularJSでは$httpサービスを使ってHTTPサーバーと通信します,DBやAPIとの通信も基本的にはこのサービスを使うことになると思います.そこで,DBとの通信を行うためにはモデル側のControllerも記述・設定が必要になります.

そのControllerも自動生成されるのですが,DB(Model)からのGETおよびPUSHメソッドは生成したままのコードでも動作します.しかし,PUT(PATCH)メソッドは生成されたままのコードでは動作しません.(200などが返ってきますが,実際にDBを確認すると更新されていないことがわかります).

改善方法

stackoverflow本家issueなどで議論されていることですが,updateの処理を行ううちの

test.controller.js
var updated = _.merge(test,req.body);

test.controller.js
var updated = _.extend(test,req.body);

とすれば正しく動作します,

筆者は両者の違いを正しく理解できていないのですが,内部でtestをどのように保持するかの違いによって結果に差が出てくるようです.

終わりに

最新版では改良されているかもしれませんが,今後この処理によって何か問題が出ることがあれば追記していきたいと思います.

言葉の誤用・乱用,あるいはより良い処理等あると思いますので,ご指摘よろしくお願いします.