node.js
、express.js
、MongoDB
およびを使用して REST API を開発してmongoose.js
いますが、これが のコールバック内で機能することがわかりました。app.put('/api/users/:userId',function(req, res) { });
new User({ userId : requestData.userId}).findByUserId(function (err, users) {
if (err) {
response.status = 'Find Error';
response.error = err;
debug('ERROR: ', err);
res.send(response);
} else if (!users.length) {
response.status = 'Registered a new user...';
debug(response.status);
var newUser = extend(new User({ userId : requestData.userId, created : Date.now() }), requestData);
newUser.save(function (err, saveduser) {
if (err) {
response.status = 'Insert Error';
response.error = err;
debug('ERROR: ', err);
} else {
response.user = saveduser;
debug('New user saved: ', saveduser);
}
res.send(response);
});
} else {
response.status = 'Found registered user...';
debug(response.status);
if (users.length !== 1) {
response.status = 'Multiple Users error';
response.error = 'Found more than one user with userId: ' + requestData.userId;
response.user = users;
debug('ERROR: Duplicate entries for userId %s. Users are: ', requestData.userId, users);
res.send(response);
} else {
var existingUser = users[0];
existingUser.updated = Date.now();
response.user = existingUser;
existingUser.save(function (err, user) {
if (err) {
response.status = 'Insert Error';
response.error = err;
debug('ERROR: ', err);
} else {
response.user = user;
debug('User updated: ', user);
}
res.send(response);
});
}
}
私はオプションを見てきupsert
ましたが、実際には頭に浮かびませんでした。
これは間違いなく正しいアプローチのようには見えません。callback
ベースとなるモデルとそのerror
議論を考慮して、正しい方法でそのようなことを行う方法についての良い記事を見つけることができませんでした。
誰かが私を正しい方向に向けることができますか?