Я пытаюсь создать корзину с помощью 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;
};
};`