Edited at

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

More than 5 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は実用性は高そうですが、現状実用的に使うにはまだ早いですね。