浪跡天涯 程式學習筆記心得

Node.js簡易sql資料庫CRUD

使用Node.js對SQL資料庫進行新增、查詢、修改、刪除。 API並不複雜,下好SQL指令即可。 因自網路上抓回的資料為JSON故無需特別處理,直接自結構中取出需要的部分。 範例程式碼及說明如下:

  1. 先在文件中載入後續會使用到的組件
    var express = require('express');
    // 後續為express app使用的路由
    var router = express.Router();
    // 讓node.js能在伺服端進行Ajax call的套件
    var fetch = require("node-fetch");
    // 此處的db.js為連接資料庫的檔案
    var connection = require('./db.js');
    
  2. 開始進行CRUD,此處由INSERT開始
    // INSERT
     router.get(
      	// 設定路由
     '/animals/fetch',
     function( req, res ) {
     	// 至網路上抓取資料,此處以台北市動物領養開放資料為例
       fetch("http://data.taipei/opendata/datalist/apiAccess?scope=resourceAquire&rid=f4a75ba9-7721-4363-884d-c3820b0b917c")
       .then(function(data){
       	// 轉換為JSON
         return data.json();
       }).then(function(data){
       	// 分析資料結構後從中抓去資料
         var list = data.result.results;
         var sql = 'INSERT INTO animals(name,sex,type,age,build,reason,email,variety) VALUES ?';
         list.forEach(function(item){
         		// 準備要由Prepared Statement使用的資料
             var data = [[item.Name,item.Sex,item.Type,item.Age,
                         item.Build,item.Reason,item.Email,item.Variety]];
             connection.query(sql, [data], function (error, result) {
                 if (error){
                 		// 若途中發生錯誤,將已新增的資料收回
                     connection.rollback(function() {
                         console.log(error); 
                       });
                 }               
             });
             connection.commit(function(error) {
                 if (error) { 
                   connection.rollback(function() {
                     console.log(error); 
                   });
                 }
             });
             console.log(item);
         });
         res.send("Data insert success!");
       });
     }
      );
    
  3. 查詢資料庫中的資料
    // SELECT
    router.get(
     '/animals/query',
     function( req, res ) {
       connection.query('SELECT * FROM animals',function(error, rows, fields){
         if(error){
             console.log(error);
             res.send(error);
         }else{
             res.json(rows);
         } 
     });
      
     }
      );
    
  4. 修改資料
      // UPDATE
      router.get(
     '/animals/update',
     function( req, res ) {
       connection.query('UPDATE animals SET name="狗狗",sex="雌",build="中",variety="巴哥"
       ,age="成年" WHERE id=1',
       function(error, result){
         if(error){
             console.log(error);
             res.send(error);
         }else{
             res.send("Data update success!");
         } 
     });
      
     }
      );
    
  5. 刪除資料
      // DELETE
      router.get(
     '/animals/delete',
     function( req, res ) {
          
       connection.query('DELETE FROM animals WHERE id=1',function(error, result){
         if(error){
             console.log(error);
             res.send(error);
         }else{
             res.send("Data delete success!");
         }
     });
     }
      );
    
  6. 最後將設定好的路由導出,再由express app當作middleware使用即可
    module.exports = router;
    

完整程式碼可至此觀看