Node.js对SQLite的async/await封装可以帮助开发者更方便地在Node.js应用中使用SQLite数据库,同时也避免了回调地狱的问题。下面将详细介绍Node.js对SQLite的async/await封装的攻略。
1. 安装依赖库
使用Node.js对SQLite进行async/await封装,需要安装以下依赖库:
- sqlite3
模块:用于操作SQLite数据库
- util
模块:用于执行异步函数方法中的promisify
方法
可通过以下命令进行安装:
npm install sqlite3 util
2. 创建SQLite数据库
可以使用SQLite的命令行工具或者GUI工具进行数据库创建,也可以使用Node.js代码来创建。在这里,我们使用Node.js代码创建数据库。首先在Node.js项目的根目录下创建database
目录,再在database
目录下创建mydb.db
SQLite数据库文件:
$ mkdir database
$ cd database
$ touch mydb.db
然后,在Node.js项目中使用以下代码创建数据库连接,同时创建一张名为employees
的员工表:
const sqlite3 = require('sqlite3').verbose();
const util = require('util');
const db = new sqlite3.Database('./database/mydb.db', (err) => {
if (err) {
console.error(err.message);
}
else {
console.log('Connected to the mydb database.');
db.run('CREATE TABLE IF NOT EXISTS employees(id INTEGER PRIMARY KEY, name TEXT, department TEXT, salary REAL)', (err) => {
if (err) {
console.error(err.message);
}
else {
console.log('Create employees table successfully.');
}
});
}
});
3. async/await封装SQLite数据库操作
使用async/await封装SQLite数据库操作,需要将SQLite的异步API方法进行promisify
,并使用await
关键字进行调用。以下是对run
、get
、all
和each
方法进行封装的示例代码:
const sqlite3 = require('sqlite3').verbose();
const util = require('util');
const db = new sqlite3.Database('./database/mydb.db', (err) => {
if (err) {
console.error(err.message);
}
else {
console.log('Connected to the mydb database.');
db.runAsync = util.promisify(db.run).bind(db);
db.getAsync = util.promisify(db.get).bind(db);
db.allAsync = util.promisify(db.all).bind(db);
db.eachAsync = util.promisify(db.each).bind(db);
}
});
async function addEmployee(employee) {
try {
const result = await db.runAsync('INSERT INTO employees(name, department, salary) VALUES (?, ?, ?)', [employee.name, employee.department, employee.salary]);
console.log(`Add ${employee.name} successfully!`);
}
catch (err) {
console.error(err.message);
}
}
async function getEmployee(id) {
try {
const employee = await db.getAsync('SELECT * FROM employees WHERE id = ?', id);
console.log(employee);
}
catch (err) {
console.error(err.message);
}
}
async function getAllEmployees() {
try {
const employees = await db.allAsync('SELECT * FROM employees');
console.log(employees);
}
catch (err) {
console.error(err.message);
}
}
async function updateEmployee(employee) {
try {
const result = await db.runAsync('UPDATE employees SET name = ?, department = ?, salary = ? WHERE id = ?', [employee.name, employee.department, employee.salary, employee.id]);
console.log(`Update ${employee.name} successfully!`);
}
catch (err) {
console.error(err.message);
}
}
async function deleteEmployee(id) {
try {
const result = await db.runAsync('DELETE FROM employees WHERE id = ?', id);
console.log(`Delete employee ${id} successfully!`);
}
catch (err) {
console.error(err.message);
}
}
上述代码中的addEmployee
、getEmployee
、getAllEmployees
、updateEmployee
和deleteEmployee
方法都是使用了async/await封装SQLite数据库操作的示例。
4. 示例
下面是使用上述封装SQLite数据库操作的示例:
const employee = [
{ name: 'Kevin Lee', department: 'IT', salary: 30000.00 },
{ name: 'Tom Jerry', department: 'HR', salary: 40000.00 },
{ name: 'Alice Smith', department: 'Sales', salary: 50000.00 }
];
async function main() {
for (let i = 0; i < employee.length; i++) {
await addEmployee(employee[i]);
}
await getAllEmployees();
await getEmployee(1);
const updatedEmployee = { id: 2, name: 'Jerry Tom', department: 'HR', salary: 45000.00 };
await updateEmployee(updatedEmployee);
await deleteEmployee(3);
await getAllEmployees();
}
main();
在上述示例中,使用for
循环向数据库中添加了三个员工,之后调用getAllEmployees
方法获取所有员工信息,再调用getEmployee
方法获取id
为1的员工信息,接着更新id
为2的员工信息,最后删除id
为3的员工信息,最后再次调用getAllEmployees
方法获取所有员工信息并输出。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js如何对SQLite的async/await封装详解 - Python技术站