2017-07-04 14 views
0

Expressアプリケーション用に(err, result)の形式で返される関数を作成する方法を理解できない。ノードにエラー/結果関数を作成する

私の現在のDBクエリ機能は次のとおりです。私のdb.jsファイルで

pool.query(
    'SELECT id FROM users WHERE email = ? LIMIT 1', 
    [email], 
    (results) => { // I'd like this to be (err, results) 
    if(results instanceof Error){...} 
    } 
}) 

、プールは次のようになります。このおよびその他の機能については

module.exports = { 
    query: (query, args, cb) => { 
    pool.getConnection((err, connection) => { 
     if(err){ 
     new Error('No database connections available in pool') 
     } else { 
     connection.query(query, args, (error, results, fields) => { 
      connection.release() 
      // I got a MySQL error here and I'd like to handle it in my callback function 
      if(error){ 
      new Error('Bad query') 
      } else { 
      cb(results) 
      } 
     }) 
     } 
    }) 
    } 
} 

、私は返すしたいのですが適切なErrorがある場合は、私のコールバックにパラメータとしてerr, resultを聞いてもらいます。

私はnew Error('Bad query')を使用してみましたが、それは関係なく、私がinstanceof Errorになってしまった方法である何(私のコールバックの最初の変数として帰ってきました。

あなたのコールバックができるように、コールバックして応答を構築するにはどうすればよいですerr, result形式で及び/適切機能上のあなたがを作成している(私はすでにこの形式でのモジュールのためにそれを使用する方法を理解する - 私は、独自のコードを書式設定/書くことについて話している。)エラーを処理するかどうかを確認?

ありがとう!

+0

は、クエリ機能のために私達にあなたのコードの残りの部分をご提示ください。あなたの問題を解決する場所は、 'cb()'と呼ばれる場所です。これは、第1引数として 'err'を渡し、第2引数として' results'を渡すところです。その関数のコードの残りの部分を表示した場合、コールバックを適切に行う方法を示すことができます。 – jfriend00

+0

ありがとう@ jfriend00 - クエリの残りの部分を追加しました –

答えて

1

あなたはこのようにそれを行うことができます。

module.exports = { 
    query: (query, args, cb) => { 
    pool.getConnection((err, connection) => { 
     if(err){ 
     cb(new Error('No database connections available in pool')); 
     } else { 
     connection.query(query, args, (error, results, fields) => { 
      connection.release(); 
      // I got a MySQL error here and I'd like to handle it in my callback function 
      if(error){ 
      cb(new Error('Bad query')); 
      } else { 
      cb(null, results); 
      } 
     }); 
     } 
    }); 
    } 
} 

あなたは常にコールバックへの最初の引数としてエラー値を渡すと、結果がある場合は、2番目としてそれを渡します。次に、コールバック内で、errがnullでないかどうかを確認し、そうであればエラーが発生しているかどうかをチェックします。 nullの場合、2番目の引数に結果が含まれます。

実際のerrの値をデータベースに戻したり含めないことで、(クエリが失敗した理由などの)有用な情報が隠れている可能性があります。あなたはこれを使用すると


は、あなたがこのような何かを:

let query = 'SELECT id FROM users WHERE email = ? LIMIT 1'; 
pool.query(query, [email], (err, result) => { 
    if (err) { 
     // handle error here 
    } else { 
     // process result here 
    } 
}); 
+0

これはまさに私が逃したものです。ありがとう! –

+0

@ Joe-NewNine - コールバックとコールバックの使用例を追加しました。 – jfriend00

関連する問題