2017-10-10 7 views
0

現在、クライアントからmysqlデータベースにアクセスするためにエクスプレスでノードjsバックエンドを実行しています。今、私はクライアントからの "太った"ものをnodejのバックエンドに置くために自分のコードをリファクタリングしています。nodejsでmysqlデータベースにアクセスするためのベストプラクティス

ModuleA:

router.get('/getitem/:code',(req, res) => { 
let sql = `SELECT * FROM xyz WHERE CODE = ${req.params.code}`; 
let query = db.query(sql, (err, result) =>{ 
    if(err == null){ 
    console.log(result); 
    res.send(result); 
    }else{ 
    console.log("Error by getting item from db: " + err); 
    throw err; 
    } 
}); 
}); 

し、必要に応じて他のモジュールによってhttpリクエストを経由してアクセス:

function geodataByLocationcode(locationcode){ 
request({ 
    method: 'GET', 
    url: "http://" + server_connection.host + ":" + server_connection.port + '/getitem/' + locationcode, 
    headers: { 
    "Content-Type": "application/json" 
    } 
},function(error, response, body){ 
.... 
} 

しかし、これがベストです 私の最初のアイデアは次のように急行路線を維持することですこれを行う方法は? または、より直接的な方法でdbにアクセスする方が良いでしょうか? リクエストは現在もバックエンドから来ているので、

+0

当社のコントローラでのデータベースへのアクセスを持っているが、良い方法ではありません...なぜにサービスモジュールを持っていませんデータベースクエリを処理しますか?あなたのコントローラにdb依存関係があるので、単体テストが難しくなります... –

+0

これについての例やチュートリアルはありますか? – WeSt

答えて

1

ネイティブドライバ(ブックシェルフのようなknexやORMのようなクエリービルダーなし)を使用して、MySqlとNode.jsを使用する良い例が見つかります。

依存性:

  • expressjs 4.xの
  • mysql2

expressjs 4.xの

中核となる概念は、以下のとおりです。

  • は別のファイルにを持っていますデータベース接続を処理する( https://github.com/Talento90/organization-api/blob/master/organizations-api/src/database.js
  • は常にAPIコントローラ(それは彼らがデータベースから分離し、簡単にテストすることができます)
  • あなたはNode.jsの最新バージョンを使用している場合にも、あなたを示してから
  • 個別の接続プールのデータベース・ロジックを使用します/ express.jsとMySQL

例で待つ非同期を使用する方法:私の正直な意見ではまあhttps://github.com/Talento90/organization-api/tree/master/organizations-api/src

関連する問題