エクスプレスでは、次のような入力に名前を付けることができます
<input name="obj[field1]">
<input name="obj[field2]">
req.body.obj をフォーマットされたオブジェクトとして取得します。
逆は可能ですか?(つまり、入力でオブジェクトを指定し、対応するフィールドにデータを入力します)
いいえ、できません。最も近い解決策は、res.locals
またはを使用してビューにデータを渡すことapp.locals
です。
app.js
app.locals({ foo: 'foo', bar: 'bar' });
index.jade
input(value=locals.foo)
input(value=locals.bar)
オブジェクトの値が事前にわからない場合は、オブジェクトのキーと値をループできます。私は Jade ビューしか知りませんが、テンプレート エンジンのドキュメントでこれを行う方法が説明されているはずです。
Express が解析されたフォーム要素名をオブジェクトに自動的に変換する方法を知りません。
ただし、手動で行うのは非常に簡単なはずです。
function makeFormObj(req, res, next){
var obj = {};
each prop in req.body{
if(req.body.hasOwnProperty(prop){
obj[prop] = req.body[prop];
}
}
req.body.obj = obj;
};
app.post('/form'
, makeFormObj
, function(req, res){
console.log(JSON.stringify(req.body, null, 2);
res.send(200, 'parsed body into object');
});