私は一時的な偽のAPIを作成しており、これを実現するためにexpress.jsを使用してノードに単純な要求応答スクリプトを設定しようとしています。これは非常に簡単です。リクエストが届き、検証され、有効な場合は.jsonテンプレートファイルとマージされて結果が返されるため、ユーザーが正常に作成されたという印象を与えます。
app.post('/agent/user', function(req, res){
var responseTemplate = new jsonRequired('post_user');
var errorTemplate = new jsonRequired('post_user_error');
var payload = req.body;
var responseData;
var hasErrors = false;
console.log('Creating new user');
//Recursive Merge from http://stackoverflow.com/a/383245/284695
responseData = new mergeRecursive(responseTemplate,payload);
if(!payload.username){
hasErrors = true;
errorTemplate.errors.username.push('A username is required.');
}
if (hasErrors){
res.send(errorTemplate,422);
}else{
res.send(responseData,200);
}
});
私が抱えている問題は、データが呼び出し間で持続していることです。したがって、1つのリクエストでユーザー名とname [first]を定義し、2番目のリクエストでユーザー名だけを定義すると、両方のリクエストがname[first]プロパティで返されます。
私はそれがjsクロージャと関係があると感じています。残念ながら、私が見つけたすべてのチュートリアルは、クロージャを回避するのではなく、クロージャを作成することに関するもののようです。
これは次のように機能するはずです。
- クライアントのPOST
username=user1&name[first]=joe&name[last]=bloggs
サーバーは、事前入力されたユーザーオブジェクトを含むjsonファイルをロードします。
{"username":"demo","name":{"first":"John","last":"Doe"}...}
mergeRecursive()
POSTリクエストからのペイロードをテンプレートオブジェクトにマージし、新しいオブジェクトをPOST応答テキストとして返します。
問題は、新しいリクエストごとに、サーバーが.jsonファイルをリロードする代わりに、ステップ2のステップ3の結果を使用していることです。