【发布时间】:2019-06-24 09:57:30
【问题描述】:
我通过 AJAX 和 JQuery 将一些数据从 JS 发送到 Node。我已经在 Node 中设置了一个发布请求,并且我已经包含了一个中间件来检查用户是否已登录(如果没有,则将他们重新路由到登录页面)。
但是,我的中间件中的 res.redirect() 似乎不适用于我的 AJAX 发布请求。我用中间件设置了另一个 GET 路由,它运行良好,只是由于某种原因它不喜欢 AJAX。这是我的代码:
来自 JS 的 AJAX POST 请求:
saveButton.on("click", function() {
var mealPlan = [];
var inputText = $(".saveInput").val();
mealPlan.push(breakfastArr);
mealPlan.push(lunchArr);
mealPlan.push(dinnerArr);
$.ajax({
method: "POST",
data: {plan: mealPlan, name: inputText},
url: "/saverecipe"
})
.done(function() {
console.log("Done");
})
.fail(function(err) {
console.log(err);
})
});
路线:
app.post("/saverecipe", isLoggedIn, function(req, res) {
//find the user
User.findById(req.user._id, function(err, user) {
if (err) {
console.log(err);
} else {
//create the meal plan
Plan.create(req.body, function(err, plan) {
if (err) {
console.log(err);
} else {
//push meal plan into user
user.mealPlans.push(plan);
user.save();
console.log("saved.");
}
})
}
})
});
中间件:
function isLoggedIn(req, res, next) {
if(req.isAuthenticated()) {
next();
} else {
console.log("Must log in");
res.redirect("/login");
req.flash("error", "Please log in first.");
}
};
如果我没有登录,似乎中间件可以在减去 res.redirect() 位的情况下工作。 isLoggedIn里面的console.log("Must log in")运行,app.post里面的console.log("saved.")没有运行,说明函数没有完成。唯一不起作用的是 res.redirect()。不知道为什么。
非常感谢您提供的任何帮助。
【问题讨论】:
标签: jquery node.js ajax express passport.js