Я пытаюсь создать любимый маршрут в моем приложении так, чтобы, если кто-то добавил в избранное, в схеме идентификатор палаточного лагеря сохранялся в избранном []. Сначала я проверяю, находится ли идентификатор палаточного лагеря в массиве, если он равен true, а затем извлекает идентификатор, если нет, то pu sh в массиве, затем отображается в профилях пользователей. здесь вы можете найти все файлы 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.e js
<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);
middleware
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;