热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

分享一个nodejsexpress连接sqlserver的单元

网站一般都是连mysql,我们搞windowsapp的都是用sqlserver必须连mssql,而mssql不用连接池则四处报错寻得一很好用的源码&

网站一般都是连mysql,我们搞windows app的 都是用sqlserver

必须连mssql,而mssql不用连接池则四处报错

寻得一很好用的源码:

//mssql.js
/***sqlserver Model**/
const mssql = require("mssql");
const conf = require("./connect.js");const pool = new mssql.ConnectionPool(conf)
const poolConnect = pool.connect()pool.on('error', err => {console.log('error: ', err)
})
/*** 自由查询* @param sql sql语句,例如: 'select * from news where id = @id'* @param params 参数,用来解释sql中的@*,例如: { id: id }* @param callBack 回调函数*/
let querySql = async function (sql, params, callBack) {try {let ps = new mssql.PreparedStatement(await poolConnect);if (params != "") {for (let index in params) {if (typeof params[index] == "number") {ps.input(index, mssql.Int);} else if (typeof params[index] == "string") {ps.input(index, mssql.NVarChar);}}}ps.prepare(sql, function (err) {if (err)console.log(err);ps.execute(params, function (err, recordset) {callBack(err, recordset);ps.unprepare(function (err) {if (err)console.log(err);});});});} catch (e) {console.log(e)}
};/*** 按条件和需求查询指定表* @param tableName 数据库表名,例:'news'* @param topNumber 只查询前几个数据,可为空,为空表示查询所有* @param whereSql 条件语句,例:'where id = @id'* @param params 参数,用来解释sql中的@*,例如: { id: id }* @param orderSql 排序语句,例:'order by created_date'* @param callBack 回调函数*/
let select = async function (tableName, topNumber, whereSql, params, orderSql, callBack) {try {let ps = new mssql.PreparedStatement(await poolConnect);let sql = "select * from " + tableName + " ";if (topNumber != "") {sql = "select top(" + topNumber + ") * from " + tableName + " ";}sql += whereSql + " ";if (params != "") {for (let index in params) {if (typeof params[index] == "number") {ps.input(index, mssql.Int);} else if (typeof params[index] == "string") {ps.input(index, mssql.NVarChar);}}}sql += orderSql;console.log(sql);ps.prepare(sql, function (err) {if (err)console.log(err);ps.execute(params, function (err, recordset) {callBack(err, recordset);ps.unprepare(function (err) {if (err)console.log(err);});});});} catch (e) {console.log(e)}
};/*** 查询指定表的所有数据* @param tableName 数据库表名* @param callBack 回调函数*/
let selectAll = async function (tableName, callBack) {try {let ps = new mssql.PreparedStatement(await poolConnect);let sql = "select * from " + tableName + " ";ps.prepare(sql, function (err) {if (err)console.log(err);ps.execute("", function (err, recordset) {callBack(err, recordset);ps.unprepare(function (err) {if (err)console.log(err);});});});} catch (e) {console.log(e)}
};/*** 添加字段到指定表* @param addObj 需要添加的对象字段,例:{ name: 'name', age: 20 }* @param tableName 数据库表名* @param callBack 回调函数*/
let add = async function (addObj, tableName, callBack) {try {let ps = new mssql.PreparedStatement(await poolConnect);let sql = "insert into " + tableName + "(";if (addObj != "") {for (let index in addObj) {if (typeof addObj[index] == "number") {ps.input(index, mssql.Int);} else if (typeof addObj[index] == "string") {ps.input(index, mssql.NVarChar);}sql += index + ",";}sql = sql.substring(0, sql.length - 1) + ") values(";for (let index in addObj) {if (typeof addObj[index] == "number") {sql += addObj[index] + ",";} else if (typeof addObj[index] == "string") {sql += "'" + addObj[index] + "'" + ",";}}}sql = sql.substring(0, sql.length - 1) + ") SELECT @@IDENTITY id"; // 加上SELECT @@IDENTITY id才会返回idps.prepare(sql, function (err) {if (err) console.log(err);ps.execute(addObj, function (err, recordset) {callBack(err, recordset);ps.unprepare(function (err) {if (err)console.log(err);});});});} catch (e) {console.log(e)}
};/*** 更新指定表的数据* @param updateObj 需要更新的对象字段,例:{ name: 'name', age: 20 }* @param whereObj 需要更新的条件,例: { id: id }* @param tableName 数据库表名* @param callBack 回调函数*/
let update = async function (updateObj, whereObj, tableName, callBack) {try {let ps = new mssql.PreparedStatement(await poolConnect);let sql = "update " + tableName + " set ";if (updateObj != "") {for (let index in updateObj) {if (typeof updateObj[index] == "number") {ps.input(index, mssql.Int);sql += index + "=" + updateObj[index] + ",";} else if (typeof updateObj[index] == "string") {ps.input(index, mssql.NVarChar);sql += index + "=" + "'" + updateObj[index] + "'" + ",";}}}sql = sql.substring(0, sql.length - 1) + " where ";if (whereObj != "") {for (let index in whereObj) {if (typeof whereObj[index] == "number") {ps.input(index, mssql.Int);sql += index + "=" + whereObj[index] + " and ";} else if (typeof whereObj[index] == "string") {ps.input(index, mssql.NVarChar);sql += index + "=" + "'" + whereObj[index] + "'" + " and ";}}}sql = sql.substring(0, sql.length - 5);ps.prepare(sql, function (err) {if (err)console.log(err);ps.execute(updateObj, function (err, recordset) {callBack(err, recordset);ps.unprepare(function (err) {if (err)console.log(err);});});});} catch (e) {console.log(e)}
};/*** 删除指定表字段* @param whereSql 要删除字段的条件语句,例:'where id = @id'* @param params 参数,用来解释sql中的@*,例如: { id: id }* @param tableName 数据库表名* @param callBack 回调函数*/
let del = async function (whereSql, params, tableName, callBack) {try {let ps = new mssql.PreparedStatement(await poolConnect);let sql = "delete from " + tableName + " ";if (params != "") {for (let index in params) {if (typeof params[index] == "number") {ps.input(index, mssql.Int);} else if (typeof params[index] == "string") {ps.input(index, mssql.NVarChar);}}}sql += whereSql;ps.prepare(sql, function (err) {if (err)console.log(err);ps.execute(params, function (err, recordset) {callBack(err, recordset);ps.unprepare(function (err) {if (err)console.log(err);});});});} catch (e) {console.log(e)}
};exports.config = conf;
exports.del = del;
exports.select = select;
exports.update = update;
exports.querySql = querySql;
exports.selectAll = selectAll;
exports.add = add;

连接字符串

// var mysql = require('mysql');
// var connection = mysql.createConnection({
// host: 'localhost',
// user: 'root',
// password: '123456',
// database: 'vantstore'
// });// module.exports = connection;//配置数据库参数module.exports = {user: 'sa',password: '123456',server: '127.0.0.1',database: 'xxxx',requestTimeout: 180000, // for timeout settingconnectionTimeout: 180000, // for timeout setting"options": {"encrypt": false, // need to stop ssl checking in case of local db"enableArithAbort": true}
}

使用方法:

const mssqldb = require("../db/mssql.js");//注册
router.post('/reg', function (req, res, next) {var userName = req.body.userName;var password = req.body.password;var usercode = req.body.usercode;var sql = 'SELECT 1 FROM m_cxt_userinfo WHERE usercode=@usercode';
//这里mssqldb.querySql(sql, {usercode: userName}, function (err, result) {if (err) {res.json({status: 500,msg: err,data: ''});return;}if (result.recordset.length !== 0) {res.json({status: 0,msg: '用户已存在!',data: ''});return;}


推荐阅读
  • 在Node.js中调用MySQL存储过程`updateUser(p1, p2, @p3)`时,其中`@p3`为输出参数。若更新操作失败,则返回0;成功则返回1。本文将详细介绍如何正确获取存储过程的返回结果,并确保在实际应用中能够顺利执行。 ... [详细]
  • 当使用 `new` 表达式(即通过 `new` 动态创建对象)时,会发生两件事:首先,内存被分配用于存储新对象;其次,该对象的构造函数被调用以初始化对象。为了确保资源管理的一致性和避免内存泄漏,建议在使用 `new` 和 `delete` 时保持形式一致。例如,如果使用 `new[]` 分配数组,则应使用 `delete[]` 来释放内存;同样,如果使用 `new` 分配单个对象,则应使用 `delete` 来释放内存。这种一致性有助于防止常见的编程错误,提高代码的健壮性和可维护性。 ... [详细]
  • 在探讨 MySQL 正则表达式 REGEXP 的功能与应用之前,我们先通过一个小实验来对比 REGEXP 和 LIKE 的性能。通过具体的代码示例,我们将评估这两种查询方式的效率,以确定 REGEXP 是否值得深入研究。实验结果将为后续的详细解析提供基础。 ... [详细]
  • 在深入研究 React 项目的过程中,特别是在探索 react-router 源码时,我发现了其中蕴含的中间件概念。这激发了我对中间件的进一步思考与整理。本文将详细探讨 Redux 中间件的原理及其在实际项目中的应用,帮助读者更好地理解和使用这一强大工具。通过具体示例和代码解析,我们将揭示中间件如何提升应用的状态管理和异步操作处理能力。 ... [详细]
  • Node.js 中的椭圆曲线 Diffie-Hellman 密钥交换方法 `crypto.createECDH()` 使用详解 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 在关系型数据库中,数据约束是指在向数据表中插入数据时必须遵循的限制条件。在MySQL和MariaDB中,常见的数据约束包括主键约束、唯一键约束、外键约束以及非空约束等。这些约束确保了数据的完整性和一致性,是数据库管理中的重要组成部分。通过合理设置和使用这些约束,可以有效防止数据冗余和错误,提升数据库的可靠性和性能。 ... [详细]
  • 本文深入探讨了JavaScript中`this`关键字的多种使用方法和技巧。首先,分析了`this`作为全局变量时的行为;接着,讨论了其在对象方法调用中的表现;然后,介绍了`this`在构造函数中的作用;最后,详细解释了通过`apply`等方法改变`this`指向的机制。文章旨在帮助开发者更好地理解和应用`this`关键字,提高代码的灵活性和可维护性。 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 在掌握Promise调用链的过程中,理解其在异步执行中的核心作用至关重要。链式调用不仅简化了代码结构,提高了可读性,还增强了程序的健壮性和维护性。类似于jQuery中常用的链式调用,如 `$(#app).show().css('color', 'red')`,Promise的链式调用通过 `.then()` 方法实现了异步操作的无缝衔接,使得复杂的异步流程更加直观和高效。掌握这些技巧将有助于开发者更好地处理异步编程中的常见问题,提升开发效率。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 深入解析 Vue3 中的响应式 API:shallowReactive、shallowRef、triggerRef 和 customRef 的使用与原理
    深入解析 Vue3 中的响应式 API:shallowReactive、shallowRef、triggerRef 和 customRef 的使用与原理 ... [详细]
author-avatar
安韦苇8
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有