节点 JS 多个 Select
Node JS Multiple Select
您好,我正在尝试在节点 js 和 sql 服务器的一个 JS 文件中使用两个 select。我无法弄清楚这个的语法。我需要一个 select 来获取 table 中的所有人,另一个 select 来计算 table.Will 中的总人数,可以将这两个 selects 在单个 JS 文件中。如果可以,有人可以帮我语法吗?
这是我试过的代码,但出现错误
"cant Set headers after they are sent"
var sql = require("mssql");
var dbConfig = {
server: "XXXXX",
database: "XXXXX",
user: "XXXXX",
password: "XXXX",
port: 1433
};
exports.list = 函数(请求,资源){
sql.connect(dbConfig, function (err) {
if (err) console.log(err);
var request = new sql.Request();
request.query('select * from PERSON', function (err, recordset) {
if (err)
console.log(err)
else
console.log(recordset)
res.render('personinfo_itwx', { data: recordset });
});
request.query('select count(*) from PERSON', function (err, recordset) {
if (err)
console.log(err)
else
console.log(recordset1)
res.render('personinfo_itwx', { data: recordset1 });
});
});
};
@Aditya 我不确定这是最好的方法,尽管我会简单地提出两个不同的请求,以实现您的需要。正如我在评论中提到的,最简单的方法是使用(例如)async 库。这是您要求的示例。
警告:我没有查看 mysql 文档
const async = require('async')
// {
async.series([
function(next)
{
new sql.Request()
.query('SELECT * from PERSON', next(err, resultList))
},
function(next)
{
new sql.Request()
.query('SELECT COUNT(*) from PERSON', next(err, count))
}
], (err, result) =>
{
/*
err: String
- if any of the shown above return an error - whole chain will be canceled.
result: Array
- if both requests will be succesfull - you'll end up with an array of results
---
Now you can render both results to your template at once
*/
})
// }
当然,如果您想在获得错误或结果后进行操作 - 您总是可以将错误和结果推送到新函数,使用您的数据,然后 return 回调。像这样:
function(next)
{
new sql.Request()
.query('SELECT * from PERSON', (err, resultList) =>
{
if (err)
{
return next(err, null)
}
/*
data manipulation
*/
return next(null, resultList)
})
},
您好,我正在尝试在节点 js 和 sql 服务器的一个 JS 文件中使用两个 select。我无法弄清楚这个的语法。我需要一个 select 来获取 table 中的所有人,另一个 select 来计算 table.Will 中的总人数,可以将这两个 selects 在单个 JS 文件中。如果可以,有人可以帮我语法吗?
这是我试过的代码,但出现错误 "cant Set headers after they are sent"
var sql = require("mssql"); var dbConfig = {
server: "XXXXX",
database: "XXXXX",
user: "XXXXX",
password: "XXXX",
port: 1433
}; exports.list = 函数(请求,资源){
sql.connect(dbConfig, function (err) {
if (err) console.log(err);
var request = new sql.Request();
request.query('select * from PERSON', function (err, recordset) {
if (err)
console.log(err)
else
console.log(recordset)
res.render('personinfo_itwx', { data: recordset });
});
request.query('select count(*) from PERSON', function (err, recordset) {
if (err)
console.log(err)
else
console.log(recordset1)
res.render('personinfo_itwx', { data: recordset1 });
});
});
};
@Aditya 我不确定这是最好的方法,尽管我会简单地提出两个不同的请求,以实现您的需要。正如我在评论中提到的,最简单的方法是使用(例如)async 库。这是您要求的示例。
警告:我没有查看 mysql 文档
const async = require('async')
// {
async.series([
function(next)
{
new sql.Request()
.query('SELECT * from PERSON', next(err, resultList))
},
function(next)
{
new sql.Request()
.query('SELECT COUNT(*) from PERSON', next(err, count))
}
], (err, result) =>
{
/*
err: String
- if any of the shown above return an error - whole chain will be canceled.
result: Array
- if both requests will be succesfull - you'll end up with an array of results
---
Now you can render both results to your template at once
*/
})
// }
当然,如果您想在获得错误或结果后进行操作 - 您总是可以将错误和结果推送到新函数,使用您的数据,然后 return 回调。像这样:
function(next)
{
new sql.Request()
.query('SELECT * from PERSON', (err, resultList) =>
{
if (err)
{
return next(err, null)
}
/*
data manipulation
*/
return next(null, resultList)
})
},