我有一个带有postgres后端的快捷应用程序,用户可以在其中添加/删除菜谱,每次这样做,他们都会得到一个更新的菜谱列表。添加一个菜谱很好,但是当我删除一个菜谱时,它似乎陷入了一个重定向循环。在app.js我有
router.get('/delete/:d', delRec.deleteRecipe);调用以下代码
exports.deleteRecipe = function(req, res){
pg.connect(conString, function(err, client) {
client.query('DELETE FROM recipes WHERE recipe_name = ', [req.params.d], function(err, result) {
if(err) {
return console.error('error running query', err);
} else if (result) {
pg.end();
console.log('deleting');
}
});
});
res.redirect('recipes');
};如果我尝试删除菜谱,console.log('deleting')会生成
deleting
deleting
deleting
deleting
deleting
deleting
deleting
deleting
deleting
deleting
deleting
deleting
deleting
deleting
deleting
deleting
deleting
deleting
deleting
deleting
deletingrecipes route在下面(抱歉,它太复杂了)
router.get('/recipes', function(req, res) {
pg.connect(conString, function(err, client) {
if(err) {
return console.error('could not connect to postgres', err);
}
client.query('SELECT * FROM recipes', function(err, result) {
if(err) {
return console.error('error running query', err);
}
recipes = result.rows;
for(var d in recipes) {
if (recipes.hasOwnProperty(d)) {
recipeList[d] = recipes[d].recipe_name;
}
}
res.render('recipes', {recipes: recipes, recipeList: recipeList});
});
});
});发布于 2014-08-25 16:33:42
引起问题的行是res.redirect('recipes');。
首先,正如@Jordonias指出的那样,您应该在db查询的回调中放置这一行。
其次,我认为这行将您从YOUR_DOMAIN.COM/delete/:d重定向到YOUR_DOMAIN.COM/delete/recipes而不是YOUR_DOMAIN.COM/recipes,这会生成无限重定向循环。绝对路径与相对路径是一个非常常见的陷阱。
所以您应该将代码更改为res.redirect('/recipes');。
https://stackoverflow.com/questions/25489995
复制相似问题