невозможно разместить на маршруте получение объекта undefined вместо обратного вызова в Node Js - PullRequest
0 голосов
/ 14 апреля 2020

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

1 Ответ

0 голосов
/ 14 апреля 2020

ваша проблема в файле /routes/campgrounds.js строка 135, измените его на:

router.post("/:id/favorite", middleware.isloggedin, function (req, res) {

ваша функция промежуточного программного обеспечения isLoggedIn должна быть изменена на isloggedin

просто неверная ошибка в регистре букв.

несколько советов и рекомендаций:

  1. просто вызовите индексный маршрутный файл в приложении. js и вызовите другие
  2. Функция isLoggedIn () существует в паспортном пакете. его проще использовать
  3. , если вы используете IDE, он показывает элементы, которые существуют на объектах, и предотвращает такие ошибки
  4. обращайте больше внимания на отслеживание стека при ошибках, он говорит, что ошибка находится в палаточных лагерях. js строка файла 135
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...