Node.js中async函数嵌套调用方法及mssql自签名证书连接报错解决
问题修正方案
你现有代码存在两处问题,修正后即可正常调用:
1. 修正getConn错误处理逻辑
当前getConn的catch块直接返回错误对象,而非抛出错误,会导致上层createThumbnails的try-catch无法捕获连接异常,且拿到的conn可能是错误实例而非可用连接,需将getConn内的return err改为throw err。
2. 新增自签名证书信任配置
报错提示为SQL Server连接的SSL证书校验失败,是因为数据库使用了自签名证书,需要在连接配置中新增参数跳过证书校验。
修正后完整代码
const sharp = require('sharp'); const sql = require('mssql') // CONNECTION CONFIGURATION OF BASE DB async function getConn() { try { const config = { user: 'sa_user', password: '*******', server: 'DEDC', database: 'DEMO_BASE', // 新增证书相关配置 options: { encrypt: true, trustServerCertificate: true } } const pool = await new sql.ConnectionPool(config) const req=await pool.connect() const conn = await req.request() return conn; } catch (err) { // 抛出错误让上层catch捕获 throw err; } }; const createThumbnails = async() => { try{ var conn = await getConn(); const query = `exec DBBASE.get_client_info` var clientusers = await conn.query(query); // 这里可以添加你的业务逻辑处理查询结果 return clientusers } catch (err) { // 可在此处添加错误日志打印逻辑 throw err; } } // 调用测试 也可以用catch捕获全局错误 createThumbnails().then(res => console.log('查询成功', res)).catch(err => console.error('执行失败', err))
内容的提问来源于stack exchange,提问作者Sai sri
相关产品推荐
相关产品推荐

