我正在尝试将redis与nodejs一起使用。
此代码工作正常:
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();
}
当我做一个卷曲时: curl -i [localhost]:3000 / api / Kendra_Loud 第一个实例返回正确的数据,但第二个实例返回null。为什么将正在执行工作的代码移动到导致问题的其他功能?在第二部分的client.get中访问时,“res”似乎也超出了范围,但是在第一部分中并非如此。 谁能请解释我在这里缺少的东西。提前谢谢。
答案 0 :(得分:0)
在发送您的回复之前,您还没有等待异步client.get()
完成。将您的fetchFromDb()
功能更改为以下内容:
function fetchFromDb(name,res){
console.log("Key given : [" + name+"]");
client.get(name,function(err,data){
if(err)
console.log("Error encountered!");
console.log("Value fetched ..." + data);
res.jsonp({"result": data});
});
}
此外,您应该通过在变量声明前添加var
前缀来避免创建全局变量。