【Node Hero】5.Node.jsデータベース教程


本論文の転載は、衆成翻訳者:ネット待ち伏せ紀事リンク:http://www.zcfy.cc/article/1751原文:https://blog.risingstack.com/node-js-database-tutorial/
下記のNode.jsデータベース教程はNode.jsアプリケーションのデータベースをどのように設定するかを示します.そして、その基礎知識を使用するように教えます.
データをグローバル変数に格納します.
上の章で習ったように、ユーザーに静的なページを提供します.着陸ページや個人のブログに適合するかもしれません.しかし、個性的な内容を渡すには、どこかにデータが存在する必要があります.
例を挙げます.ユーザ登録.ユーザーにカスタマイズコンテンツを提供したり、ユーザーが認証した後にのみ利用できるようにしたりすることができます.
ユーザがあなたのアプリケーションを登録したいなら、ルートプロセッサを作成して登録を成功させたいかもしれません.
const users = []

app.post('/users', function (req, res) {  
    //                 
    const user = req.body
    users.push({
      name: user.name,
      age: user.age
    })
    res.send('    !')
})
このようにして、ユーザーをグローバル変数に格納することができ、このグローバル変数は、アプリケーションライフサイクルのいずれもメモリに保存されます.
この方法を使うといくつかの理由で問題が発生します.
  • メモリが高いです.
  • アプリケーションを再起動するたびにメモリがリセットされます.
  • 掃除しないと、スタックがオーバーフローすることがあります.
  • データをファイルに保存します.
    あなたの脳裏に現れた次の出来事は、データをファイルに保存することかもしれません.
    ユーザーデータをファイルシステムに恒久的に格納すると、前列の問題が回避される.
    実際、この方法は次のように見えます.
    const fs = require('fs')
    
    app.post('/users', function (req, res) {  
        const user = req.body
        fs.appendToFile('users.txt', JSON.stringify({ name: user.name, age: user.age }), (err) => {
            res.send('    !')
        })
    })
    このような方式はユーザーデータを失わないので、サーバーが再起動してもできません.この解決策は経済的にも効果的です.メモリを買うよりメモリを買う方が安いからです.
    残念なことに、このようにユーザデータを記憶するのにはいくつかの欠陥が残っている.
  • ユーザーデータを追加することは可能ですが、更新または削除したいです.
  • ファイルに保存する場合、並列アクセスファイルは容易ではない(システムレベルのロックはデータの書き込みを阻止する).
  • アプリケーションを拡張すると、ファイルをサーバ間に分割することはできません.
  • これが実際のデータベースの役割です.
    データベースには二つのタイプがあると聞きましたが、SQLとNOSQLです.
    SQL
    私たちはSQLで始まります.SQLは関係データベースのためのクエリー言語です.使用中の製品によってSQLはいくつかのスタイルがありますが、基本原理は同じです.
    データ自体は表に格納されますが、挿入されたブロックごとに表の行として表示されます.Google SheetsまたはMicrosoft Excelのように.
    SQLデータベースでは、schemaを定義することができます.これらのschemaは、あなたが入れたいデータの骨格を提供します.データを格納する前に、異なる値の種類を設定しなければなりません.例えば、ユーザデータにテーブルを定義しなければなりません.データベースのユーザ名は文字列タイプで、年齢は整数型です.
    NoSQL
    一方、NoSQLデータベースはここ10年でかなり流行しています.NoSQLを使うと、schemaを定義する必要がなく、任意のJSONを記憶することができます.これはJavaScriptに便利です.JavaScriptでは対象をJSONに変換するのが簡単です.しかし、NoSQLを使うには、データの整合性が保証されていないので、データベースに何があるか分かりません.
    Node.jsとMongoDB
    Node.jsに対してよくある誤解をよく聞きます.
    「Node.jsはMongoDBしか使えません.一番流行りのNoSQLデータベースです.」
    私の経験からすると、これは正しくないです.ほとんどのデータベースにはドライバがあります.NPMにもライブラリがあります.私の見るところでは、彼らはMongoDBと同じように使いやすいです.
    Node.jsとPostgreSQL
    簡単のために、以下の例でSQLを使用するつもりです.私が選んだのはPostgreSQLです.
    PostgreSQLを起動して実行させるには、あなたのコンピュータにインストールしなければなりません.Macなら、homebrewでPostgreSQLをインストールします.また、Linuxなら、あなたが使っているバッグマネージャを使ってインストールします.
    さらなる情報はこの優れたガイドを読んでください.最初のデータベースを起動して実行させます.
    データベースを使ってツールをブラウズするつもりなら、コマンドラインプログラムpsql-PostgreSQLサーバインストールプログラムと一緒に縛られることをおすすめします.ここには小さい速診表がありますが、もしPostgreSQLを使い始めたら、それは遅かれ早かれ役に立ちます.
    コマンドラインインターフェースが嫌なら、オープンソースのPostgreSQLでグラフィカルインターフェースツールpgAdminを管理できます.
    注意してください.SQL自体は言語です.すべての機能を説明することはできません.一番簡単なことだけを話します.もっとSQLに関する知識を知るには、PostgreSQLの基礎知識を説明する授業がたくさんあります.
    Node.jsデータベースのインタラクション
    まず、使用するデータベースを作成します.このため、端末には以下のコマンドが入力されます.createdb node_hero次に、ユーザーテーブルを作成します.
    CREATE TABLE users(  
      name VARCHAR(20),
      age SMALLINT
    );
    最後に、コードに戻ります.Node.jsプログラムを通じてデータと対話するコードです.
    'use strict'
    
    const pg = require('pg')  
    const conString = 'postgres://username:password@localhost/node_hero' //               
    
    pg.connect(conString, function (err, client, done) {  
      if (err) {
        return console.error('error fetching client from pool', err)
      }
      client.query('SELECT $1::varchar AS my_first_query', ['node hero'], function (err, result) {
        done()
    
        if (err) {
          return console.error('error happened during query', err)
        }
        console.log(result.rows[0])
        process.exit(0)
      })
    })
    これは簡単なPostgreSQL'hello worldの例です.注意第一のパラメータはSQLコマンド文字列で、第二のパラメータはクエリーに提供されるパラメータ値配列です.
    ユーザー入力でデータベースに挿入すると、大きなセキュリティ問題があります.この方法はSQL注入攻撃を防ぐことができ、このタイプの攻撃は攻撃者が完全に未処理のSQLクエリを利用しようとするものである.ユーザー向けのアプリケーションを作成するには、常にこのような状況を考慮しなければならない.SQLの安全性に関する知識をもっと勉強したいです.Node.jsアプリ安全覚書を確認してください.
    次の例を続けます.
    app.post('/users', function (req, res, next) {  
      const user = req.body
    
      pg.connect(conString, function (err, client, done) {
        if (err) {
          //        express      
          return next(err)
        }
        client.query('INSERT INTO users (name, age) VALUES ($1, $2);', [user.name, user.age], function (err, result) {
          done() //   done       pg            ,          
    
          if (err) {
            //        express      
            return next(err)
          }
    
          res.send(200)
        })
      })
    })
    ロック解除を完了しました.ユーザはデータベースに保存します.:今は彼らを獲得してみます.次のステップは、ユーザがアプリケーションに新しいエンドポイントを追加するために取得します.
    app.get('/users', function (req, res, next) {  
      pg.connect(conString, function (err, client, done) {
        if (err) {
          //        express      
          return next(err)
        }
        client.query('SELECT name, age FROM users;', [], function (err, result) {
          done()
    
          if (err) {
            //        express      
            return next(err)
          }
    
          res.json(result.rows)
        })
      })
    })
    難しくないですよね.
    Node.jsアプリケーションに提供する任意の複雑なSQLクエリを実行してもいいです.
    この技術を使って、データをアプリケーションに永久に保存できます.Node-postgreSQLモジュールチームの勤勉な労働のおかげで、データを記憶するのが容易になりました.
    Nodejsでデータベースを使うために必要な基礎知識は全部完成しました.今は自分で何かを作りに行きます.
    試してみて、実験して、これは1つの本当のNodeの勇士の最優秀方式と称するためです.実践して次の章を準備して、もし第三者とAPI通信するならば!
    もしあなたが本教程に関する問題があれば、またはNode.jsでデータベースを使う問題があれば、できるだけ出してください.