我正在尝试在我的应用程序中创建一个收藏夹路线,这样,如果有人添加到收藏夹,则在该架构中,露营地的ID将保存在收藏夹[]中。 IAM首先检查营地ID是否在数组中(如果为true),然后拉取ID(如果不是),然后推入数组,然后在用户配置文件中显示。在这里您可以找到所有文件filehosting.org/file/details/859995/project1%20-%20Copy.rar
但每次显示此内容
Copy\node_modules\express\lib\router\route.js:202
throw new Error(msg);
^
Error: Route.post() requires a callback function but got a [object Undefined]
at Route.<computed> [as post] (D:\college\project1 - Copy\node_modules\express\lib\router\route.js:202:15)
at Function.proto.<computed> [as post] (D:\college\project1 - Copy\node_modules\express\lib\router\index.js:510:19)
at Object.<anonymous> (D:\college\project1 - Copy\routes\campgrounds.js:135:8)
at Module._compile (internal/modules/cjs/loader.js:1158:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
at Module.load (internal/modules/cjs/loader.js:1002:32)
at Function.Module._load (internal/modules/cjs/loader.js:901:14)
at Module.require (internal/modules/cjs/loader.js:1044:19)
at require (internal/modules/cjs/helpers.js:77:18)
at Object.<anonymous> (D:\college\project1 - Copy\app.js:20:23)
at Module._compile (internal/modules/cjs/loader.js:1158:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
at Module.load (internal/modules/cjs/loader.js:1002:32)
at Function.Module._load (internal/modules/cjs/loader.js:901:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
at internal/main/run_main_module.js:18:47
路线代码
router.post("/:id/favorite", middleware.isloggedin, function(req, res) {
User.findById(req.user._id, function(err, user) {
if (err) {
console.log(err);
return res.redirect("/c");
}
// check if req.user._id exists in foundCampground.favorites
var foundUserfavorite = user.favorites.some(function(favorite) {
return favorite.equals(req.params.id);
});
if (foundUserfavorite) {
// user already favorited, removing favorite
user.favorites.pull(req.params.id);
} else {
// adding the new user favorite
user.favorites.push(req.params.id);
}
user.save(function(err) {
if (err) {
console.log(err);
return res.redirect("/c");
}
return res.redirect("/c");
});
});
});
show.ejs
<div style="padding-bottom: 10px;">
<form action="/campgrounds/<%= campground._id %>/favorite" method="POST">
<div class="btn-group">
<% if (currentUser && user.favorites.some(function (favorite) {
return favorite.equals(campground._id)
})) { %>
<button class="btn btn-sm btn-primary">
<i class="fas fa-heart"></i> favorited
</button>
<% } else { %>
<button class="btn btn-sm btn-secondary">
<i class="fas fa-heart"></i> add to favorite
</button>
<% } %>
</div>
</form>
用户架构
var mongoose = require("mongoose");
var plm = require("passport-local-mongoose");
var userSchema = new mongoose.Schema({
username: { type: String, unique: true, required: true },
password: String,
avatar: String,
favorites: [{
type: mongoose.Schema.Types.ObjectId,
ref: "Campground"
}],
reputation: { type: String, default: 'noob' },
rPT: String,
rPE: Date,
email: { type: String, unique: true, required: true },
isadmin: { type: Boolean, default: false }
});
userSchema.plugin(plm);
module.exports = mongoose.model("User", userSchema);
中间件
var Campground = require("../models/campground");
var Comment = require("../models/comment");
var middlewareo = {};
middlewareo.checkcampowner = function(req, res, next) {
if (req.isAuthenticated()) {
Campground.findById(req.params.id, function(err, foundcaa) {
if (err || !foundcaa) {
req.flash("error", "Not Found");
res.redirect("back");
} else {
// console.log(foundcaa.author.id);// console.log(req.user._id);
if (foundcaa.author.id.equals(req.user._id) || req.user.isadmin) {
next();
} else {
req.flash("error", "You Don't Have Permission");
res.redirect("back");
}
}
});
} else {
req.flash("error", "Please Login to Edit")
res.redirect("back");
}
}
middlewareo.checkcomow = function(req, res, next) {
if (req.isAuthenticated()) {
Comment.findById(req.params.comment_id, function(err, foundcomm) {
if (err || !foundcomm) {
req.flash("error", "Not Found");
res.redirect("/c");
} else {
// console.log(foundcaa.author.id);// console.log(req.user._id);
if (foundcomm.author.id.equals(req.user._id) || req.user.isadmin) {
next();
} else {
req.flash("error", "Permission Denied");
res.redirect("back");
}
}
});
} else {
req.flash("error", "Please Login");
res.redirect("back");
}
}
middlewareo.isloggedin = function(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
req.flash("error", "Please Login!!");
res.redirect("/login");
};
module.exports = middlewareo;
答案 0 :(得分:0)
您的问题出在文件/routes/campgrounds.js第135行中,将其更改为:
router.post("/:id/favorite", middleware.isloggedin, function (req, res) {
您的中间件功能isLoggedIn
应该更改为isloggedin
只是一个简单的错误的大小写字母错误。
一些提示和最佳做法: