在使用restify模块发送节点js后,不能设置标头

时间:2015-02-06 13:24:05

标签: javascript node.js restify

我使用繁琐的连接到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在发送后设置了标题。

2 个答案:

答案 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值。

我把数据放在那些行中,我很高兴。