0

node.jsexpress.jsMongoDBおよびを使用して 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議論を考慮して、正しい方法でそのようなことを行う方法についての良い記事を見つけることができませんでした。

誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

2

既存のユーザーを更新するか、新しいユーザーを作成する単一のルートの概念は良い考えではないと思います。代わりに、REST 設計に従うことを検討してください。

app.post('/api/users', createNewUser);
app.put('/api/users/:userId', updateUser);

createNewUser適切な属性を持つ新しいユーザー オブジェクトを作成し、saveそれを呼び出すだけです。updateUserできますUser.update({_id: req.params.userId}, fieldsToChange...。単純な作成/更新のペアが正常に機能し、自信が持てるようになるまで、既に登録されているユーザーを確認するなどの複雑さを追加しないでください。次に、コードをより堅牢で現実的なものに進化させることができますが、段階的に進めてください。

于 2013-07-02T00:31:40.873 に答える