ホームページ >データベース >mysql チュートリアル >Node.js ログイン API が Promise で機能しないのはなぜですか?

Node.js ログイン API が Promise で機能しないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-16 06:38:02706ブラウズ

Why Is My Node.js Login API Not Working with Promises?

Node.js Express と Promises が期待どおりに動作しない

Node.js ログイン API が誤解により予期しない動作を示していますPromise が非同期操作とどのように相互作用するかについて説明します。それぞれの問題に対処しましょう:

1. Promise がデータベース クエリを待機していません

findUser() 関数が Promise を返しません。代わりに、データベース クエリは非同期であり、実行に時間がかかるため、すぐに unknown が返されます。これを修正するには、クエリが完了したときに呼び出されるコールバック関数を query() メソッドに渡す必要があります:

me.findUser = function(params, res) {
  var username = params.username;

  return new Promise(function (resolve, reject) {
    pool.getConnection(function (err, connection) {
      if (err) {
        reject(err);
      } else {
        connection.query('select ...', [username], function (err, rows) {
          connection.release();
          if (!err) {
            resolve(rows);
          } else {
            reject(err);
          }
        });
      }
    });
  });
}

2。エラー ハンドラーがトリガーされません

Promise の拒否() メソッドが呼び出されないため、エラー ハンドラーはトリガーされません。コードでは、エラーが発生したときにデータベース クエリのコールバックから false を返します。代わりに、次のエラーを含む Promise を拒否する必要があります:

me.findUser = function(params, res) {
  // ...

  return new Promise(function (resolve, reject) {
    // ...

    connection.query('...', [username], function (err, rows) {
      connection.release();
      if (!err) {
        resolve(rows);
      } else {
        reject(err);
      }
    });
  });
}

改訂されたルート ファイル

ここに、ログイン ルート ファイルの修正バージョンがあります。 Promise を適切に使用します:

module.exports = function(app) {

  app.post('/login/', async function(req, res, next) {

    try {
      // Find user in database
      var rows = await loginM.findUser(req.body, res);

      // Do something with the data
      var result = await loginC.doSomething(rows);

      console.log("Success");
    } catch (err) {
      console.log("Failed: " + err.message);
    }
  });
}

説明

Promise を使用すると、ログイン API の各ステップが順番に実行されるようになります。 await キーワードを使用すると、コードは先に進む前に Promise が解決されるまで待機し、次のステップが前のステップのデータに確実にアクセスできるようにします。さらに、try/catch を使用すると、プロセス中に発生する可能性のあるエラーを処理できます。

以上がNode.js ログイン API が Promise で機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。