NodeJS将一个额外的参数传递给回调

时间:2013-12-05 10:40:55

标签: javascript node.js callback

我是Node.JS的初学者,作为第一个试用版,我正在实现一个小的URL缩短服务,它将获取带有id参数的请求,并在搜索cassandra数据库后重定向到实际的url。 您可以在下面找到我的实施方案。

var reqResponse;

app.get('/r/:id', function(req, res) {
    reqResponse = res;
    conn.connect(function(err, keyspace) {
        if(err){
            throw(err);
        }
        conn.cql(cqlSelectStatement, [req.params.id], { gzip:true }, redirectCallback);
    });

});

function redirectCallback (err, results) {
    if (err != null) {
        //log
    } else {
        if (results.length > 0) {
            results.every(function(row){
                reqResponse.writeHead(config.redirectStatus, {
                    'Location': row[0].value
                });
                reqResponse.end();
                return false;
            });
        } else {
            reqResponse.send("There was a problem!");
            return false;
        }
    }
    conn.close();
    return true;
}

它工作正常,它完成了工作,但我对reqResponse“全局”变量有一些疑问。我不喜欢那里。 有没有办法可以将“res”作为参数发送到redirectCallback函数?

谢谢!

1 个答案:

答案 0 :(得分:4)

是的:创建一个匿名函数并使用它来传递参数:

app.get('/r/:id', function(req, res) {
    conn.connect(function(err, keyspace) {
        if(err){
            throw(err);
        }
        conn.cql(cqlSelectStatement, [req.params.id], { gzip:true }, function (err, results) { redirectCallback(err, res, results); } );
    });

});

你的回调变为:

function redirectCallback (err, res, results) {