我正在嘗試使用redis和nodejs。節點js回調不明確
此代碼工作正常:
express = require('express');
app = express();
logger = require('express-logger');
app.use(logger({path: "/home/debanjan/Documents/nodejs/project1/logfile.txt"}));
var redis = require('redis');
var client = redis.createClient();
client.on("error", function (err) {
console.log("Error " + err);
});
app.get(function(req,res,next){
console.log("Date " + Date.now() + " :: Time " + Time.now());
next();
})
app.get('/api/:name',function(req,res){
res.status(200);
res.set('Content-Type', 'text/plain');
client.get(req.params.name , function(err,data){
if(err){
console.log("Error encountered!");
}else{
console.log("Value fetched ..." + data);
res.jsonp({"result": data});
res.send();
}
});
});
app.listen(3000,function(){
console.log("Ready to launch...");
});
然而,這是沒有的。
express = require('express');
app = express();
logger = require('express-logger');
app.use(logger({path: "/home/debanjan/Documents/nodejs/project1/logfile.txt"}));
var redis = require('redis');
var client = redis.createClient();
client.on("error", function (err) {
console.log("Error " + err);
});
app.get(function(req,res,next){
console.log("Date " + Date.now() + " :: Time " + Time.now());
next();
})
app.get('/api/:name',function(req,res){
res.status(200);
res.set('Content-Type', 'text/plain');
fetchFromDb(req.params.name,res);
});
app.listen(3000,function(){
console.log("Ready to launch...");
});
function fetchFromDb(name,res){
console.log("Key given : [" + name+"]");
value = new Object;
client.get(name,function(err,data){
if(err)
console.log("Error encountered!");
console.log("Value fetched ..." + data);
});
res.jsonp({"result": value});
res.send();
}
當我做了捲髮: 捲曲-i [本地主機]:3000/API/Kendra_Loud 第一實例返回正確的數據,但是,第二個返回null。爲什麼要將執行該工作的代碼轉移到導致該問題的其他功能?在第二部分中,當訪問client.get內部時,「res」似乎超出了範圍,但是在第一部分中卻不是這樣。 任何人都可以請解釋我在這裏失蹤。提前致謝。
你確定你的第二個例子返回'null'和正確的一組數據,並且你已經顯示了代碼?你是否發現你永遠不會改變'value'變量的值(在分配一個空對象之後),然後在你的迴應中發送它? – raina77ow 2014-11-22 21:39:15
是的,問題不是範圍,而是時間:調用'res.jsonp()'_before_'client.get'完成它的工作。 – raina77ow 2014-11-22 21:40:24