我需要在限制搜索的基础上检索受影响的总行数-Node/Express/sqlserver

我需要在限制搜索的基础上检索受影响的总行数-Node/Express/sqlserver,sql,sql-server,node.js,express,Sql,Sql Server,Node.js,Express,我正在为我的一个呼叫创建分页。我需要检索将受影响的所有行,而不管所选页面如何。我还需要仅检索该页面的对象。创建两个查询是有意义的。然而,我不确定该怎么做,因为我不断地返回错误 route.js: 我需要以某种方式将两者结合起来。谢谢 我认为只有两个相同的router.get中的第一个将被执行,所以这是您的主要问题 您可以将它们组合成一个。如下所示: router.get('/', (req, res) => { new sql.ConnectionPool(config).conne

我正在为我的一个呼叫创建分页。我需要检索将受影响的所有行,而不管所选页面如何。我还需要仅检索该页面的对象。创建两个查询是有意义的。然而,我不确定该怎么做,因为我不断地返回错误

route.js:


我需要以某种方式将两者结合起来。谢谢

我认为只有两个相同的router.get中的第一个将被执行,所以这是您的主要问题

您可以将它们组合成一个。如下所示:

router.get('/', (req, res) => {
   new sql.ConnectionPool(config).connect().then(pool => {
     let sqlString = `
     SELECT dt.[dataID]
     FROM DataTable dt with (nolock)
     `
     return pool.request().query(sqlString);

   }).then(result => {
     console.log(result, result.rowsAffected[0], 'logging result')
     let rows = result.recordset

     let paginationHeader = {
        totalCount: result.rowsAffected[0],
        pageSize: req.query.pageSize,
        currentPage: req.query.pageNumber
     }
     res.setHeader('X-Pagination', JSON.stringify(paginationHeader))
     res.setHeader('Access-Control-Allow-Origin', '*')
     res.setHeader('Access-Control-Expose-Headers', 'X-Pagination', JSON.stringify(paginationHeader))
     sql.close();

     /* BEGIN - added code from your second proc */
     return new sql.ConnectionPool(config).connect()
  }).then(pool => {
     let sqlString = `
     SELECT dt.[dataID]
     FROM DataTable dt with (nolock)
     ORDER BY c.Description OFFSET @pageNumber ROWS FETCH NEXT @size ROWS ONLY 
     `

     return pool.request().input('size', sql.Int, req.query.pageSize).input('pageNumber', sql.Int, req.query.pageNumber).query(sqlString)
  }).then(result => {
     console.log(result, result.rowsAffected[0], 'logging result')
     let rows = result.recordset

     sql.close();
     res.status(200).json(rows);
  }).catch(err => {
     console.log(".catch ERROR: ", err);
     sql.close();
     res.status(500).send({ message: err})
  });
});
我刚刚从你的第二个路由器中找到了代码。把第一个路由器的代码放在一起


干杯

错误是…?在上面的实例中,请求暂停,因此没有返回任何包含错误的内容,假设因为它只读取第一个查询,并且由于没有发送任何内容,所以它只是等待。我认为这是一个错误,因为它不是我想要的。你把最高级的查询称为第一个查询吗?据我所知,SELECT查询可能被阻止的唯一原因是发生了事务。查看使用nolock删除是否有帮助?我的错误是没有指定,是的,这是正确的。我得到了同样的结果。当我记录结果时,我只检索最上面的查询,而不是它下面的查询。也许这会给你一个更好的提示。我用这个更新了答案。好的,我颠倒了顺序,得到了这个错误-UnhandledPromisejectionWarning:Unhandled promise拒绝id:1:错误:发送邮件后无法设置邮件头。它返回为200,但没有标题。是的,res.status必须在所有res.setHeader设置之后出现。啊,好的,它现在似乎工作了!我不知道我在倒转它们之前做了什么。谢谢你的帮助!
router.get('/', (req, res) => {
   new sql.ConnectionPool(config).connect().then(pool => {
     let sqlString = `
     SELECT dt.[dataID]
     FROM DataTable dt with (nolock)
     `
     return pool.request().query(sqlString);

   }).then(result => {
     console.log(result, result.rowsAffected[0], 'logging result')
     let rows = result.recordset

     let paginationHeader = {
        totalCount: result.rowsAffected[0],
        pageSize: req.query.pageSize,
        currentPage: req.query.pageNumber
     }
     res.setHeader('X-Pagination', JSON.stringify(paginationHeader))
     res.setHeader('Access-Control-Allow-Origin', '*')
     res.setHeader('Access-Control-Expose-Headers', 'X-Pagination', JSON.stringify(paginationHeader))
     sql.close();

     /* BEGIN - added code from your second proc */
     return new sql.ConnectionPool(config).connect()
  }).then(pool => {
     let sqlString = `
     SELECT dt.[dataID]
     FROM DataTable dt with (nolock)
     ORDER BY c.Description OFFSET @pageNumber ROWS FETCH NEXT @size ROWS ONLY 
     `

     return pool.request().input('size', sql.Int, req.query.pageSize).input('pageNumber', sql.Int, req.query.pageNumber).query(sqlString)
  }).then(result => {
     console.log(result, result.rowsAffected[0], 'logging result')
     let rows = result.recordset

     sql.close();
     res.status(200).json(rows);
  }).catch(err => {
     console.log(".catch ERROR: ", err);
     sql.close();
     res.status(500).send({ message: err})
  });
});