用js简单提供增删改查接口

23次阅读

共计 3870 个字符,预计需要花费 10 分钟才能阅读完成。

本周写实验,需要提供简单的后台接口对数据库进行增删改查,以前写后台只用过 php 和 java, 因为比较容易,用 js 写的也比较快,所以这次想用 js 实现简单的增删改查接口。

初始化

  • 需要工具:nodejs
  • 依赖:express,mysql,body-parser(这些都是 npm 的包)

为了能够解析 js, 需要下载 nodejs, 下载完 nodejs, 创建一个文件夹,使用 npm init 初始化, 除了填写名字,一路确定下去,在文件夹下就会多出一个 package.json 文件.

// 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 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 专门用来处理数据库连接问题:

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

总结

感觉算是理解了语言只是工具这句话.

正文完
 0