Node.js连接Sql Server 2008及数据层封装详解
概述
本文将介绍如何利用Node.js连接Sql Server 2008数据库,并且通过数据层封装实现对数据库的基本操作。在具体实现过程中,我们将使用mssql模块来连接Sql Server数据库。同时,我们会利用ES6的async/await语法来编写数据层方法,并且提供两个示例说明。
准备工作
在开始实践前,我们需要先准备好相关工具和环境:
- 安装Node.js(本文使用Node.js v12.18.3)
- 安装npm(本文使用npm v6.14.6)
- 安装mssql模块(本文使用mssql v6.3.1)
- 拥有一个Sql Server 2008数据库实例,并拥有连接该数据库实例的权限。
连接Sql Server 2008数据库
首先,我们需要通过mssql模块来连接Sql Server 2008数据库。以下是一个示例代码:
const sql = require('mssql');
//配置数据库连接
const config = {
user: 'your_username',
password: 'your_password',
server: 'your_server_address',
database: 'your_database_name'
};
//连接数据库
const pool = new sql.ConnectionPool(config);
pool.connect((err) => {
if(err){
console.log(err);
}else{
console.log('Connected to Sql Server');
}
});
以上代码中,我们首先使用require()方法引入了mssql模块,并且配置了数据库连接的参数(用户名、密码、服务器地址、数据库名称)。我们使用ConnectionPool对象来连接数据库。在连接成功后,我们将在控制台输出Connected to Sql Server。
数据层封装
为了实现对数据库的基本操作,我们需要构建数据层。数据层是一个封装了对数据库的操作的模块。每个数据库实体通常都对应着一个数据层模块。以下是一个示例代码(本文将以blogs表为例):
const sql = require('mssql');
const config = {
user: 'your_username',
password: 'your_password',
server: 'your_server_address',
database: 'your_database_name'
};
const pool = new sql.ConnectionPool(config);
const connect = pool.connect();
class Blog {
async getAll() {
await connect;
try {
const request = pool.request();
const result = await request.query('SELECT * FROM blogs');
return result.recordset;
} catch (err) {
console.log('Error:', err);
}
}
async getById(id) {
await connect;
try {
const request = pool.request();
request.input('id', sql.Int, id);
const result = await request.query('SELECT * FROM blogs WHERE id = @id');
return result.recordset[0];
} catch (err) {
console.log('Error:', err);
}
}
async create(blog) {
await connect;
try {
const request = pool.request();
request.input('title', sql.NVarChar(50), blog.title);
request.input('content', sql.NVarChar, blog.content);
const result = await request.query('INSERT INTO blogs (title, content) VALUES (@title, @content); SELECT SCOPE_IDENTITY() AS id;');
return result.recordset[0].id;
} catch (err) {
console.log('Error:', err);
}
}
async update(id, blog) {
await connect;
try {
const request = pool.request();
request.input('id', sql.Int, id);
request.input('title', sql.NVarChar(50), blog.title);
request.input('content', sql.NVarChar, blog.content);
const result = await request.query('UPDATE blogs SET title = @title, content = @content WHERE id = @id');
} catch (err) {
console.log('Error:', err);
}
}
async delete(id) {
await connect;
try {
const request = pool.request();
request.input('id', sql.Int, id);
const result = await request.query('DELETE FROM blogs WHERE id = @id');
} catch (err) {
console.log('Error:', err);
}
}
}
module.exports = new Blog();
以上代码中,我们使用ES6的class语法来定义Blog。Blog中封装了基本的增删改查操作,以及连接数据库的方法和数据库配置信息。我们可以通过在需要的地方引入Blog(const Blog = require('./models/blog');
)来使用这些操作。
示例一
假设我们现在需要获取blogs表中ID为1的记录,并将结果打印到控制台中。以下是一个示例代码:
const Blog = require('./models/blog');
(async () => {
const blog = await Blog.getById(1);
console.log(blog);
})();
以上代码中,我们首先引入Blog,并使用异步箭头函数来获取id为1的记录。我们将结果打印到控制台中。
示例二
假设我们现在需要往blogs表中插入一条记录,并将结果打印到控制台中。以下是一个示例代码:
const Blog = require('./models/blog');
(async () => {
const blog = {title: 'Hello World', content: 'This is my first blog'};
const insertedId = await Blog.create(blog);
console.log('Inserted ID:', insertedId);
})();
以上代码中,我们同样使用异步箭头函数来插入博客数据,并将返回的插入标识打印到控制台中。
总结
本文中,我们介绍了如何利用mssql模块连接Sql Server 2008数据库,并且使用ES6的async/await语法来实现数据层操作。通过选择合适的Node.js模块和技术,我们可以更加高效地连接数据库和进行数据操作,而不必担心复杂的异步回调问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js连接Sql Server 2008及数据层封装详解 - Python技术站