我是 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函数?
谢谢!
最佳答案
是的,有:创建一个匿名函数并使用它来传递参数:
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) {
关于javascript - NodeJS 将额外参数传递给回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20397763/