我需要在限制搜索的基础上检索受影响的总行数-Node/Express/sqlserver
我正在为我的一个呼叫创建分页。我需要检索将受影响的所有行,而不管所选页面如何。我还需要仅检索该页面的对象。创建两个查询是有意义的。然而,我不确定该怎么做,因为我不断地返回错误 route.js:我需要在限制搜索的基础上检索受影响的总行数-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
我需要以某种方式将两者结合起来。谢谢 我认为只有两个相同的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})
});
});