【问题标题】:Ejs in if statement Cannot read property ' foo ' of undefinedif 语句中的 Ejs 无法读取未定义的属性 'foo'
【发布时间】:2018-05-03 06:24:13
【问题描述】:

我正在尝试使用 Nodejs 创建一个购物车。在我的项目中,我有一个带有ejs的“if语句”,例如=>`

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

而且,当我第一次进入该站点时,我收到错误“无法读取未定义的属性 'totalItems'”,因为 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;
    };
};`

【问题讨论】:

    标签: javascript node.js session cookies ejs


    【解决方案1】:

    尝试这样做:

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

    【讨论】:

    • 感谢您的帮助,是的,它解决了我的问题 :)
    • 可能,现在我还有一点 :) 我正在尝试修复它
    • 你现在有什么问题?我会尽力帮助你
    • 我只需要将 if 语句放在另一个地方。谢谢你的帮助,你救了我的命^^
    猜你喜欢
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2021-03-12
    • 2020-07-20
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多