收到错误“无法找到绑定文件”
尝试搜索博客帖子,然后根据博客缩写查找横幅,然后写出
没有横幅查找,一切正常
认为我们搞砸了回调但却找不到好的例子
app.get("/posting/:id", function(req,res) {
var db = app.get('db');
var id = [req.params.id];
console.log(id);
db.run("select * from postings where id=$1",[1], function(err,posting) {
console.log(posting);
var choice = posting[0].choice;
var banner = banner_lookup(choice, function(err, banner) {
console.log(banner);
res.render("posting", {posting:posting[0], banner:banner});
});
});
});
function banner_lookup(abbrev) {
console.log("banner lookup");
for (i=0;i++;i<banners.length) {
if (abbrev == banners[i].abbrev) {
console.log(banners[i]);
return (banners[i]);
}
}
return {"name":"","color":"#000"};
}
var banners = [{"abbrev":"aaa","name":"Newsletter A", "color":"#888888"}];
答案 0 :(得分:0)
你的函数banner_lookup在其decleration上只需要一个参数,但是当你调用它时它会传递它2(选择和回调函数)。
答案 1 :(得分:0)
问题在于该计划的这一部分。您基本上将两个参数传递给banner_lookup
函数 - 变量choice
和回调函数,您希望在查找之后标题可用
var banner = banner_lookup(choice, function(err, banner) {
console.log(banner);
res.render("posting", {posting:posting[0], banner:banner});
});
然而,banner_lookup
的实际函数定义只接受一个命名参数 - choice
。 banner_lookup
函数计算并返回标题值,但它没有像您期望的那样传递给回调函数。您必须明确编写功能以支持banner_lookup
您的代码(具有回调功能)将如下所示
function banner_lookup(abbrev, callback) {
console.log("banner lookup");
var bannerOutput = {"name":"","color":"#000"};
for (i=0;i++;i<banners.length) {
if (abbrev == banners[i].abbrev) {
console.log(banners[i]);
bannerOutput = banners[i];
}
}
if(typeof callback == "function") {
callback(null, bannerOutput);
} else {
return bannerOutput;
}
}
上面的方法现在接受一个callback
参数,如果它被定义为一个函数,那么将输出传递给函数,否则就像之前一样返回它。
提示1 :如果banner_lookup
函数正在同步执行简单任务,则实际上不需要实现回调功能。你可以简单地写
var banner = banner_lookup(choice);
console.log(banner);
此横幅将具有预期结果。
提示2 :正如Amit在评论中指出的,请阅读有关SQL注入攻击的内容。确保清理所有进行数据库查询的变量(您直接接受路由中的id
参数并将其传递给数据库查询,这很容易被误用。