用js簡單提供增刪改查接口

本週寫實驗,須要提供簡單的後臺接口對數據庫進行增刪改查,之前寫後臺只用過php和java,由於比較容易,用js寫的也比較快,因此此次想用js實現簡單的增刪改查接口。php

初始化

  • 須要工具:nodejs
  • 依賴:express,mysql,body-parser(這些都是npm的包)

爲了可以解析js,須要下載nodejs,下載完nodejs,建立一個文件夾,使用npm init初始化,除了填寫名字,一路肯定下去,在文件夾下就會多出一個package.json文件.java

// 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這個包,在根目錄下使用這個命令:node

$ npm install express

此時就引入了express這個包,建立一個index.js文件到根目錄下,內容:mysql

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!了:sql

$ node index.js
server now listening at 3000 port

clipboard.png

這說明咱們已經監聽了3000端口而且能夠用js來處理http請求了.數據庫

鏈接數據庫

我使用的是mysql數據庫,爲了方便操做數據庫,引入mysql這個包:express

$ npm install mysql
npm WARN test@1.0.0 No description
npm WARN test@1.0.0 No repository field.

+ mysql@2.17.1
added 9 packages from 14 contributors and audited 134 packages in 4.145s
found 0 vulnerabilities

在index.js同路徑下建立一個db.js專門用來處理數據庫鏈接問題:npm

//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語句導出給其餘模塊調用.json

提供後臺接口

在index.js導入db.js,而且將http請求和數據庫操做對接:c#

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');
});

clipboard.png
另外,爲了讀取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');
});

總結

感受算是理解了語言只是工具這句話.

相關文章
相關標籤/搜索