使用Node.js對SQL資料庫進行新增、查詢、修改、刪除。 API並不複雜,下好SQL指令即可。 因自網路上抓回的資料為JSON故無需特別處理,直接自結構中取出需要的部分。 範例程式碼及說明如下:
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');
// 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!");
});
}
);
// 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);
}
});
}
);
// 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!");
}
});
}
);
// 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!");
}
});
}
);
module.exports = router;