使用 restify 模块时,在发送节点 js 后无法设置 headers
can't set headers after they are sent node js when using restify module
我已经使用繁琐的方式连接到 sql 服务器并为 restful api restify
这是 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);
}
我收到错误消息,因为发送后无法设置 headers。
我不是 100% 确定,因为我不熟悉你正在使用的 SQL 库,但是,在我看来问题是你的 row
事件会被引发 每行,而不是每笔交易。
您将在第一个 row
事件之后结束响应,因此如果返回多行,则响应已经关闭(因此出现错误)。
处理此问题的一种方法是在检索行数据时累积行数据,然后然后在完成后引发回调
现在您已经说明了您正在使用的库 (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
参数将为空。
我使用 mssql 的问题是我有一个默认值或绑定集(在本例中为 (getdate()))到我的一个列(修改日期列)。但是,我试图检索的数据为此特定列预设了 NULL 值。
我将数据放入这些行中,一切顺利。
我已经使用繁琐的方式连接到 sql 服务器并为 restful api restify 这是 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);
}
我收到错误消息,因为发送后无法设置 headers。
我不是 100% 确定,因为我不熟悉你正在使用的 SQL 库,但是,在我看来问题是你的 row
事件会被引发 每行,而不是每笔交易。
您将在第一个 row
事件之后结束响应,因此如果返回多行,则响应已经关闭(因此出现错误)。
处理此问题的一种方法是在检索行数据时累积行数据,然后然后在完成后引发回调
现在您已经说明了您正在使用的库 (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
参数将为空。
我使用 mssql 的问题是我有一个默认值或绑定集(在本例中为 (getdate()))到我的一个列(修改日期列)。但是,我试图检索的数据为此特定列预设了 NULL 值。
我将数据放入这些行中,一切顺利。