Node.js
AngularJS
Synth

Synth@0.5.3でPOST|GETのパラメータの取り方が変更になったメモ

More than 3 years have passed since last update.

Synthの最新版ではbodyParserがSynthソースコード内から生成されるひな形内に移動しています。
それによって使用方法が違うので、それのメモです。

back/resources/account/post.coffee
exports.postRegist = (params)->
  console.log params
  result =
    result: "successss"
    post: params
  return result

一行目exports.postRegist = (params)->の引数である括弧内にほしい文字列を入れたらデータがとれます。
つまり、
(params, req, res)(req, params, res)でコードの動作に差はありません。
仕組みとしては、back/service/params.jsparamsと言うパラメータをバインドするようになっており、

params.js
var _ = require('lodash');
var Promise = require('bluebird');
var bodyParser = Promise.promisify(require('body-parser').json());
exports.params = function (req, res) {
  // Combines the three sources of parameters into one, and return them in one object
  // Similar to how Rails and various other frameworks do it
  return bodyParser(req, res).then(function () {
    return _.merge({}, req.query, req.params, req.body);
  });
};

このように、今までExpressでは分散されていたreq.query, req.params, req.bodyがマージされた状態で取得することができます。
それによって、何も考えずにGETとPOSTの両方で同じコードによってパラメータを取得することが可能です。

Synthのバージョンを上げた事でPOSTの値が取得できなくなったため、私はこれによって小3時間は悩みました。
結局最新のSynthでテンプレートを作りなおして差分を適応した所、このようになっていたので、私のような犠牲者がこれ以上増えないことを祈って書きました。

Synthは実用性は高そうですが、現状実用的に使うにはまだ早いですね。