【发布时间】:2015-02-10 02:32:45
【问题描述】:
所以我正在创建一个 REST API,当有人调用一个方法来返回数据时,我从外部 API 获取数据,检查数据的 ID 是否已经存在,如果存在,更新它,如果不存在创造它。
问题是,如果另一个请求进入同一资源,我的函数会查找数据,发现它不存在(还),但是当它到达保存调用时,保存上一个函数已经完成,所以保存失败(某些字段必须是唯一的)。
我目前使用 nodejs async 和单个工作人员设置了一个队列。这可行,但我认为它确实会导致性能问题!
有谁知道我可以如何以不会导致性能问题的方式做到这一点?
var storeData = function(APIResponse, id, callback){
Record.findOne({ id: id }, function(err, data) {
if(data === null) {
//No record, so lets create one
var data = {};
data.id = id;
data.title = APIResponse.title;
var dataToSave = new Record(data);
} else {
//data exists in store, lets update it
data.title = APIResponse.title; //Update title
var dataToSave = data;
}
dataToSave.save(function(err, doc) {
if(err) {throw err;}
//A callback to continue with some other processes
callback(null, APIResponse, doc);
});
});
};
非常感谢任何想法/建议,非常感谢
【问题讨论】:
-
在您的 REST 调用中,如果您假设数据创建,您会将什么传递给
id? -
从字面上看是资源的唯一 ID。 (例如 10191)。这个想法是数据被缓存以备后用
-
但是如果你正在创建一个新项目,你怎么知道 ID 呢?你在那里传递 null 或一些特殊的字符串或什么?它总是一个 ID 吗?
-
REST 调用将始终附加一个 ID。所以用户可以搜索这个资源,当他们选择它时,调用将包含从外部 API 获取的 ID。 (我知道 ID,因为我是从事先发生的外部 API 调用中获取的。)
-
啊,明白了。你看过这个答案吗? stackoverflow.com/a/16362833/970721
标签: javascript node.js mongodb asynchronous mongoose