NodeJS+ES 7+Express+MySQLはAPI serverのベストドライバーを構築します。
2567 ワード
以前はjavascriptの多くの不完全なデザインのため、私は振り向いてiced-coffee scriptに頼っていました。正直に言って、私が使っていたのはとても楽しかったです。ES 5年代に、みんなの前でマルチコード農がcalback hallでもがいていた時に、iced-coffeescriptのasync/awaitを使って、calback hellとES 6の
しかし、時代の発展とともに、javascript言語自体もES 7に進化しました。coffeescriptから生まれた太い矢印とasyncも標準に書かれました。それに、いくつかの啓発を受けました。JSを再び抱擁し、よく整理してください。
まず、asyncを使うなら、NodeJSは7.0以上にアップグレードしなければなりません。過程は全然怖くないです。公式サイトにインストールファイルをダウンロードして、次のステップ、次のステップで完成します。
また、ORMは使わないつもりです。ちょっと複雑なqueryでさえあれば、SQLはORMに完勝します。
node-mysqlをasync/awaitに変更します。
元々node-mysqlの最適な実践は連続池を作ることです。connectionのライフサイクルを
requireはimportに進化しました。
残念ながら、NodeJS 7.0はまだimportを支援しないので、babelで翻訳しなければなりません。しかも、全体のアプリが起動する時はまず package.jsonを修正し、 を実行する。新規追加。babelrc 新規追加./bin/index.js routerを整理する
次号に続く
Promise.all
機能を簡単に解決しました。しかし、時代の発展とともに、javascript言語自体もES 7に進化しました。coffeescriptから生まれた太い矢印とasyncも標準に書かれました。それに、いくつかの啓発を受けました。JSを再び抱擁し、よく整理してください。
まず、asyncを使うなら、NodeJSは7.0以上にアップグレードしなければなりません。過程は全然怖くないです。公式サイトにインストールファイルをダウンロードして、次のステップ、次のステップで完成します。
また、ORMは使わないつもりです。ちょっと複雑なqueryでさえあれば、SQLはORMに完勝します。
node-mysqlをasync/awaitに変更します。
元々node-mysqlの最適な実践は連続池を作ることです。connectionのライフサイクルを
pool
に任せて管理/回収します。標準的な使い方は以下の通りです。
pool.query('SELECT * FROM User WHERE id=?',[1],(err,result) => {
if(err) return errorHandler(res,err);
...
});
asyncはpromiseの上に構築されているので、node-mysqlオフィシャルはpromiseの実作を提供していないようです。// db.js
const db = {
query (query,params) {
return new Promise(resolve, reject) {
pool.query(query,params,(err, result) => {
if(err) reject(err);
else resolve(result);
});
}
}
}
export default db;
promise会throw exceptionだけに、使う時もtry catchで包んでください。router.get('/user/:id', async (req,res) => {
try {
const user = await db.query('SELECT * FROM User WHERE id=?',[req.params.id])
const notebook = await db.query('...', otherParams)
}
catch (e) {
return errorHandler(res,err)
}
});
毎回try catchが必要だと思うならば、ここに解決案A、解決案B、解決案Cがあります。注意するのは、複数のqueryがある時は、pool
を使うほうがいいです。requireはimportに進化しました。
残念ながら、NodeJS 7.0はまだimportを支援しないので、babelで翻訳しなければなりません。しかも、全体のアプリが起動する時はまず
try-catch
を使ってください。一番いい実践は以下の通りです。require('babel-register')
"scripts": {
// node-dev
"dev": "node-dev --use_strict ./bin/index"
},
"devDependencies": {
"MD5": "~1.2.0",
"babel-cli": "^6.24.1",
"babel-preset-es2015-node4": "^2.1.0",
"babel-preset-stage-3": "^6.5.0",
"babel-register": "^6.6.5",
...
}
{
"presets": ["es2015-node4", "stage-3"]
}
require('babel-register');
require('../app.js');
npm install
次号に続く