无法使用 SQL Server 和 NodeJS mssql 库来使用PreparedStatement

问题描述 投票:0回答:1

这个 mssql 是我用于 SQL Server 的库。

要做出准备好的陈述,您需要获取

PreparedStatement
对象,并且需要执行以下操作:

  1. ps.input
  2. ps.prepare
  3. ps.execute
  4. ps.unprepare

然后随时处理错误。

router.get('/debtors/', async (req, res) => {
  const column = req.query.column
  
  console.log(column)
  res.send("ok")

  const ps = new sql.PreparedStatement(/* [pool] */)
  ps.input('param', sql.VarChar(20))
  ps.prepare('select @param from debtors', err => {
    ps.execute({ param: column }, (err, result) => {
      console.log("Result: " + result);
      ps.unprepare(err => {
      })
    })
  })
})

这段代码来自官方文档,只是稍作调整。我使用邮递员发送的 URL 是这样的:

localhost:8687/debtors/?column=id

console.log("Result: " + result);
导致错误:

结果:未定义

我不知道为什么。

req.query.column
确实返回字符串“id”,我已将其设置为
VarChar(20)
。我也尝试过四处移动
@param
,看看是否有限制。

select * 
from debtors 
where first = @param

所以我尝试的下一件事是这个,但是

result
仍然未定义。我不知道为什么。如有任何帮助,我们将不胜感激。

node.js sql-server
1个回答
0
投票

感谢@siggemannen,我能够解决这个问题。看到这个错误让我思考是否分配了连接,我检查了其他人的代码并意识到在创建

PreparedStatement
时我需要从
ConnectionPool
mssql
函数传入
connect
对象。

所以我做了这些改变。

// db.js
var pool;

sql.connect(dbConfig).then(result => result = pool).catch(err => {
  console.error("Connection issue: " + err)
  console.error(err.stack)
})

module.exports = { pool, ...}

然后在我需要使用

PreparedStatement

的文件中
const { pool } = require("db");

// ... code

router.get('/debtors/', async (req, res) => {
  const column = req.query.column
  const ps = new sql.PreparedStatement(pool) // <--- This is the important part
  ps.input('param', sql.VarChar(200))
  ps.prepare('select * from debtor WHERE first = @param', err => {
    console.log("ps.prepare err: " + err)

    ps.execute({ param: column }, (err, result) => {
      console.log("ps.execute: " + err);

      res.send(result.recordset);
      
      ps.unprepare(err => {
      })
    })
  })
})

问题是,由于我假设回调已激活,因此意味着没有错误。结果无论是否有错误都会激活回调,并检查是否有错误。我需要检查是否

err === undefined

© www.soinside.com 2019 - 2024. All rights reserved.