我使用繁琐的连接到sql server并为resful api解析 这是server.js
server.get('/getInvoiceData', function (req, res, next) {
repository.GetInvoiceData(function(data){
res.send(data);
next();
});
});
和invoice.js
exports.GetInvoiceData = function(callback){
var query = "SELECT * FROM [Snapdeal].[dbo].[tbl_Configuration]";
var req = new request(query,function(err,rowcount){
if (err)
{
console.log(err.toString());
}else{
console.log(rowcount+ " rows");
}
});
req.on('row',function(){
callback({customernumber:123});
});
connection.execSql(req);
}
我收到错误,因为Cant在发送后设置了标题。
答案 0 :(得分:3)
我不是100%肯定,因为我不熟悉您正在使用的SQL库,但是,我认为问题是您的row
事件将被引发每行,而非每次交易。
您将在第一个row
事件之后结束响应,因此如果返回多行,则响应将已关闭(因此错误)。
处理此问题的一种方法是在检索行数据时累积行数据,然后在完成后提高回调
现在你已经说过你正在使用的lib(Tedius),看来我的预感是正确的。查看库,这是在单个回调中返回所有行的最简单方法
exports.GetInvoiceData = function(callback){
var query = "SELECT * FROM [Snapdeal].[dbo].[tbl_Configuration]";
var req = new request(query,function(err, rowcount, rows){
if (err) {
console.log(err.toString());
} else{
callback(rows);
}
});
connection.execSql(req);
}
注意 - 请记住将config.options.rowCollectionOnRequestCompletion
设置为true
,否则rows
参数将为空。
答案 1 :(得分:0)
我的问题是,使用mssql,我有一个默认值或绑定集(在本例中,(getdate()))到我的一个列(修改日期列)。但是,我尝试检索的数据已为此特定列预设了NULL值。
我把数据放在那些行中,我很高兴。