MySQL 是关系型数据库,它是成熟度较高的数据库,适用范围很广,但是在面对海量数据时,性能有些不足。
首先我们安装 MySQL:https://www.mysql.com/downloads/ 。当然,我们依然可以使用 Docker 来安装 MySQL:docker pull mysql
。
npm install mysql
我们利用 MySQL 在数据库中初始增加一个用户,然后访问查询并返回结果。
const koa = require('koa');
const router = require('koa-router')();
const koaBody = require('koa-body');
const mysql = require('mysql');
const app = new koa();
function customSync(promise) {
return promise
.then(data => {
return [null, data];
})
.catch(err => [err]);
}
// database
const pool = mysql.createPool({
host : '127.0.0.1',
user : 'root',
password : '123456',
database : 'test_db'
});
let query = function( sql, values ) {
return new Promise(( resolve, reject ) => {
pool.getConnection(function(err, connection) {
if (err) {
reject( err );
} else {
connection.query(sql, values, (err, rows) => {
if ( err ) {
reject( err );
} else {
resolve( rows );
}
connection.release();
})
}
})
});
}
// initial table
query(`
CREATE TABLE IF NOT EXISTS User
(username VARCHAR(200) NOT NULL,
password TEXT
PRIMARY KEY(username))`)
.then(result => {
console.log('Create user table.')
})
.catch(error => {
console.error('Error create table.')
console.error(error);
});
query(`
INSERT INTO User (username, password)
VALUES('test', 'test')`))
.then(result => {
console.log('Add test user.');
})
.catch(err => {
console.error('Error add test user');
console.error(error);
});
// request data parser
app.use(koaBody());
// routers
router.post('/api/query-user', async (ctx, next) => {
let username = ctx.request.body.username;
let password = ctx.request.body.password;
const u = new user({
username: username,
password: password,
});
let [err, temp] = await customAsync(query(
`SELECT username FROM User
WHERE username='${username}' AND password='${password}'`
));
if (err) {
console.error(`Error query ${username}`);
console.error(err);
ctx.response.body = 'Error';
return;
}
ctx.response.body = temp;
});
app.use(router.routes());
app.listen(3000, () => {
console.log('Koa running at port 3000...');
});
同样可以使用 curl 测试查询结果。
curl http://localhost:3000/api/query-user -X POST "username=test&password=test"
curl http://localhost:3000/api/query-user -X POST "username=t&password=test"