我正在制作一个临时的假 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],而在第二个请求中只定义了一个用户名,那么两个请求都会返回 name[first] 属性。
我觉得这与 js 闭包有关。不幸的是,我发现的每个教程似乎都是关于制作闭包,而不是避免它们。
它应该像这样工作:
- 客户端 POST
username=user1&name[first]=joe&name[last]=bloggs
服务器加载一个包含预填充用户对象的 json 文件:例如
{"username":"demo","name":{"first":"John","last":"Doe"}...}
mergeRecursive()
将来自 POST 请求的有效负载合并到模板对象上,并将新对象作为 POST 响应文本返回。
问题是对于每个新请求,服务器都在步骤 2 中使用步骤 3 的结果,而不是重新加载 .json 文件。