Ejs в операторе if Не удается прочитать свойство 'foo' из неопределенного - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь создать корзину с помощью Nodejs. В моем проекте у меня есть оператор if с ejs, например => `

<%   if (session.cart.totalItems) { %>
</i> Cart <span class="badge"><%=  session.cart.totalItems  %></span></a>
<% } %>`

И при первом входе на сайт я получаю сообщение об ошибке «Невозможно прочитать свойство totalItems of undefined», поскольку totalItems является пустой частью файлов cookie. На самом деле, если я добавляю Предмет в корзину покупок, функция работает. Моя проблема возникает при первом входе на сайт. Я искал, как я могу решить проблему, но не смог найти никакого решения до сих пор. Любая идея, как я могу исправить проблему или открыть сайт в первый раз без ошибки? app.js`

const mongoose          =   require("mongoose"),
      express           =   require("express"),
      app               =   express(),
      bodyParser        =   require("body-parser"),
      passport          =   require("passport"),
      session           =   require("express-session"),
      LocalStrategy     =   require("passport-local"),
      expressValidator  =   require("express-validator"),
      MongoStore        =   require("connect-mongo")(session),
      flash             =   require('connect-flash');
      morgan            =   require("morgan");
      User              =   require("./models/users");
      Cart              =   require("./models/cart");
       var cookieParser = require('cookie-parser');
      const       productsModel = require("./models/product");
 ///App Config////////////////
 app.set("view engine","ejs" );
 app.use(express.static("public"));
 app.use(bodyParser.urlencoded({ extended: false }));
 app.use(bodyParser.json());
 app.use(expressValidator());
 app.use(cookieParser());
 app.use(flash());
 ///pass////validator///
    app.use(passport.initialize());
    app.use(passport.session());
    require('./node_modules/passport/lib/middleware/authenticate')(passport);//add this line
    passport.use(new LocalStrategy(User.authenticate()));
    passport.serializeUser(User.serializeUser());
    passport.deserializeUser(User.deserializeUser());

    app.use(require("express-session")({
        secret:"guvenlik cumlesi",
        resave:false,
        saveUninitialized:false,
        store:new MongoStore({mongooseConnection : mongoose.connection}),
        ////// 180 min // 60 sc///1000//mlsec
        cookie:{maxAge:180 *60*1000}

    }));
/////////middleware

    app.use(function(req, res, next) {
        res.locals.session = req.session;
        res.locals.totalItems = null
        next();
    });
///////routers////////
const   indexRouter = require("./routes/indexRouter"),
        signupR     = require("./routes/admin/signupR"),
        loginR      = require("./routes/admin/loginR"),
        cartR       = require("./routes/users/checkoutCart")
        adminE      =require("./routes/admin/adminE");
app.use(indexRouter);
app.use(loginR);
app.use(signupR);
app.use(adminE);
app.use(cartR);
 //-------------------//// Basit server////---------------//
const server = app.listen(3000, function(err){
    if(err){
        console.log(err);
    }
    console.log("sunucu port : %d ", server.address().port);
    });
            //////mogoosee//////
mongoose.connect('mongodb://localhost/P-Scrubs');
mongoose.connection.on("connected",()=>{
    console.log("db Bagli")
})
mongoose.connection.on("error",()=>{
    if(err) {
        console.log("DBhata ===>>",err)
    }
    console.log("db kaka")
})

module.exports = app;

модель моей корзины`

module.exports = function Cart(cart) {

    this.items = cart.items || {};
    this.totalItems = cart.totalItems || 0;
    this.totalPrice = cart.totalPrice || 0;

    this.add = function(item, id) {
        var cartItem = this.items[id];
        if (!cartItem) {
            cartItem = this.items[id] = {item: item, quantity: 0, price: 0};
        }
        cartItem.quantity++;
        cartItem.price = cartItem.item.price * cartItem.quantity;
        this.totalItems++;
        this.totalPrice += cartItem.item.price;
    };

    this.remove = function(id) {
        this.totalItems -= this.items[id].quantity;
        this.totalPrice -= this.items[id].price;
        delete this.items[id];
    };

    this.getItems = function() {
        var arr = [];
        for (var id in this.items) {
            arr.push(this.items[id]);
        }
        return arr;
    };
};`

1 Ответ

0 голосов
/ 03 мая 2018

Попробуйте сделать это:

<%   if (session.cart && session.cart.totalItems) { %>
</i> Cart <span class="badge"><%=  session.cart.totalItems  %></span></a>
<% } %>`
...