首页 > 解决方案 > 在 Sequelize getProducts 方法中查询

问题描述

我正在 NodeJS 中实现一个电子商务网站。我正在使用 Sequelize 来管理 MySQL。但是在使用 getProducts() 方法时出现错误。我使用 getProducts() 方法的函数代码如下

exports.postCart = (req, res, next) => {
  const p_id = req.body.p_id;
  // console.log(p_id);
  
  let fetchedCart;
  let newQuantity = 1;
  req.user
    .getCart()
    .then((cart) => {
      fetchedCart = cart;
      console.log(p_id);
      return cart.getProducts({ where: { id: p_id } });
    })
    .then((products) => {
      let product;
      if (products.length > 0) {
        product = products[0];
      }
      if (product) {
        // ....
      }
      return Product.findByPk(p_id)
    })
    .then((product) => {
      return fetchedCart.addProduct(product, {
        through: { quantity: newQuantity }
      });
    })
    .then(() => {
      res.redirect("/cart");
    })
    .catch((err) => {
      console.log(err);
    });
};

我正在关注一个我认为使用旧版本续集的教程。我正在使用 6.3.0 版本的续集。sequelize 6 中没有方法 getProducts() 或者我输入错误。欢迎任何帮助 :D 在此先感谢 :)

关联文件

const http = require("http");
const path = require("path");

const express = require("express");
const bodyParser = require("body-parser");

const pageNotFoundController = require("./controllers/pageNotFound");
const sequelize = require("./util/database");
const Product = require('./models/product');
const User = require('./models/user');
const Cart = require('./models/cart');
const CartItem = require('./models/cart-item');

const app = express();

app.set("view engine", "ejs");
app.set("views", "views");

const adminRoutes = require("./routes/admin");
const shopRoutes = require("./routes/shop");

app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, "public")));

app.use((req, res, next) => {
  User.findByPk(1)
  .then(user => {
    req.user = user;
    next();
  })
  .catch(err => {
    console.log(err);
  });
});


app.use("/admin", adminRoutes);
app.use(shopRoutes);

app.use(pageNotFoundController.getPageNotFound);

Product.belongsTo(User, {constraints: true, onDelete: 'CASCADE'});
User.hasMany(Product);

User.hasOne(Cart);
Cart.belongsTo(User);

Cart.belongsToMany(Product, { through: CartItem });
Product.belongsToMany(Cart, { through: CartItem });

sequelize
  // .sync({ force: true })
  .sync()
  .then((result) => {
    return User.findByPk(1);
    // console.log(result);

  })
  .then(user => {
    if (!user) {
      User.create({name: "Prerak", email: "pmp.tech2000@gmail.com"});
    }
    return user;
  })
  .then(user => {
    console.log(user);
  })
  .then(cart => {
    app.listen(3000);
  })
  .catch((err) => {
    console.log(err);
  });

模型文件

模型-cart.js

const Sequelize = require('sequelize')

const sequelize = require('../util/database')

const Cart = sequelize.define('cart', {
  id: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    allowNull: false,
    primaryKey: true
  }
});

module.exports = Cart;

模型 - 购物车-item.js

    const Sequelize = require("sequelize");
    
    const sequelize = require("../util/database");
    
    const CartItem = sequelize.define("cartItem", {
      id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        allowNull: false,
        primaryKey: true,
      },
      quantity: {
        type: Sequelize.INTEGER,
      },
    });
    
    module.exports = CartItem;

model - product.js

    const Sequelize = require("sequelize");
    
    const sequelize = require("../util/database");
    
    const Product = sequelize.define("product", {
      id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        allowNull: false,
        primaryKey: true,
      },
      title: Sequelize.STRING,
      price: {
        type: Sequelize.DOUBLE,
        allowNull: false,
      },
      imageUrl: {
        type: Sequelize.STRING,
        allowNull: false,
      },
      description: {
        type: Sequelize.STRING,
        allowNull: false,
      },
    });
    
    module.exports = Product;

model - user.js

const Sequelize = require("sequelize");

const sequelize = require("../util/database");

const User = sequelize.define("user", {
  id: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    allowNull: false,
    primaryKey: true,
  },
  name: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  email: {
    type: Sequelize.STRING,
    allowNull: true,
  },
});

module.exports = User;

标签: node.jssequelize.js

解决方案


推荐阅读