我是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函数?
谢谢!
答案 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) {