jsで簡単に削除変更インタフェースを提供する

5945 ワード

今周の书く実験、简単なバックグラウンドのインタフェースを提供してデータベースに対して添削して调べる必要があって、以前バックグラウンドを书いてphpとjavaだけを使ったことがあって、比较的に容易で、jsで书くのも比较的に速いので、今回jsで简単な添削してインタフェースを调べたいです.
初期化
  • ツールが必要:nodejs
  • 依存:express,mysql,body-parser(これらはnpmのパッケージ)
  • jsを解析するためには、nodejsをダウンロードし、nodejsをダウンロードし、フォルダを作成し、npm initを使用して初期化する必要があります.名前を記入する以外は、フォルダの下にpackage.jsonファイルが1つ増えます.
    // package.json
    {
      "name": "test",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC"
    }
    

    httpリクエストを受け入れて処理するには、expressというパッケージを導入し、ルートディレクトリの下でこのコマンドを使用する必要があります.
    $ npm install express

    expressというパッケージが導入され、index.jsファイルがルートディレクトリの下に作成されます.
    var express = require('express');
    var app = express();
    
    app.get('/', function(req, res) {
        res.send('hello world!');
    });
    app.listen(3000, function() {
        console.log('server now listening at 3000 port');
    });

    端末を開き、nodejsを使用してindex.jsをコンパイルし、ブラウザを開いてlocalhost:3000を入力するとhello worldが表示されます!を選択します.
    $ node index.js
    server now listening at 3000 port

    これは、3000ポートを傍受し、jsでhttpリクエストを処理できることを示している.
    データベースの接続
    私はmysqlデータベースを使用しています.データベースの操作を容易にするために、mysqlというパッケージを導入しました.
    $ npm install mysql
    npm WARN [email protected] No description
    npm WARN [email protected] No repository field.
    
    + [email protected]
    added 9 packages from 14 contributors and audited 134 packages in 4.145s
    found 0 vulnerabilities

    データベース接続の問題を処理するためにindex.jsのパスの下にdb.jsを作成します.
    //db.js
    var mysql = require('mysql');
    var pool = mysql.createPool({ //    
      host: "localhost",
      user: "root",
      password: "",
      database: "c#learn",
      port: "3306"
    });
    
    var sql = {    
      insert:'INSERT INTO teacher(name, username, email, sex) VALUES(?,?,?,?)',              
      update:'update teacher set name=?, username=?, email=?, sex=? where id=?',    
      delete: 'delete  from teacher where id=?',    
      queryById: 'select * from teacher where id=?',    
      queryAll: 'select * from teacher'
    };
    
    function query(sql, data, callback) {
      pool.getConnection(function(err, connection) { 
        connection.query(sql, data, function(err, rows) {
          callback(err, rows);
          connection.release(); //    
        });
      });
    }
    exports.query = query;
    exports.sql = sql;

    データベース情報を構成するpoolオブジェクトを取得すると、poolオブジェクトでデータベースを操作することができ、sql文を構成し、クエリー方法とsql文を他のモジュール呼び出しにエクスポートすることができる.
    バックグラウンドインタフェースの提供
    index.jsでdb.jsをインポートし、httpリクエストとデータベース操作をドッキングします.
    var express = require('express');
    var app = express();
    var db = require('./db.js');
    
    app.get('/', function(req, res) {
        res.header("Access-Control-Allow-Origin", "*");
        db.query(db.sql.queryAll, [], function(err, rows) {
            res.send(JSON.stringify(rows));
        });
    });
         localhost:3000     teacher        。
    app.listen(3000, function() {
        console.log('server now listening at 3000 port');
    });

    また、postとputのbody情報を読み取るには、body-parserというパッケージが必要です.
    $ npm install body-parser

    bodyParserを使用してappを構成します.
    //index.js
    var express = require('express');
    var db = require('./db.js');
    var app = express();
    var bodyParser = require('body-parser');
    
    app.use(bodyParser.json());

    このときreq.bodyでリクエストボディを読み取ることができます.完全なコード:
    var express = require('express');
    var db = require('./db.js');
    var app = express();
    var bodyParser = require('body-parser');
    
    app.use(bodyParser.json());
    
    app.get('/', function(req, res) {
        res.header("Access-Control-Allow-Origin", "*");
        db.query(db.sql.queryAll, [], function(err, rows) {
            console.log('err', err, 'rows', rows);
            res.send(JSON.stringify(rows));
        });
    });
    
    app.get('/:id', function(req, res) {
        res.header("Access-Control-Allow-Origin", "*");
        db.query(db.sql.queryById, [req.params.id], function(err, rows) {
            res.send(JSON.stringify(rows));
        });
    });
    
    app.post('', function(req, res) {
        res.header("Access-Control-Allow-Origin", "*");
        console.log(req.body.name);
        var teacher = req.body;
        db.query(db.sql.insert, [teacher.name, teacher.username, teacher.email, teacher.sex], function(err, rows) {
            if (err) {
                res.status(500);
                res.send('insert error');
            } else {
                res.status(200);
                res.send('insert success');
            }
        });
    });
    
    app.put('/:id', function(req, res) {
        res.header("Access-Control-Allow-Origin", "*");
        var teacher = req.body;
        var array = [teacher.name, teacher.username, teacher.email, teacher.sex, req.params.id];
        db.query(db.sql.update, array, function(err, rows) {
            if (err) {
                res.status(500);
                res.send('update error');
            } else {
                res.status(200);
                res.send('update success');
            }
        });
    });
    
    app.delete('/:id', function(req, res) {
        res.header("Access-Control-Allow-Origin", "*");
        db.query(db.sql.delete, [req.params.id], function(err, rows) {
            if (err) {
                res.status(500);
                res.send('delete error');
            } else {
                res.status(200);
                res.send('delete success');
            }
        });
    });
    
    app.listen(3000, function() {
        console.log('server now listening at 3000 port');
    });
    

    まとめ
    言叶はただの道具だという言叶を理解したような気がします.