如何在生成 index.js 时修复 sequelize 连接问题?

问题描述

我是 node.js 的新手,并且在使用 sequelize-cli 时遇到了一些问题。 我有 sequelize 模型,当我运行该项目时,我的 index.js 出现错误

const model = require(path.join(__dirname,file))(sequelize,Sequelize.DataTypes);
TypeError: require(...) is not a function

项目无法找到或读取此内容(sequelize、Sequelize.DataTypes)。

我的项目:server.js

const express = require("express");
const productRouter = require("./routers/productRouter");
const discountRouter = require("./routers/discountRouter")

const app = express();
const PORT = process.env.PORT || 3000;

app.use(express.json());

// Запрос на таблицу с продуктами
app.use("/shop",productRouter);
// Запрос на таблицу со скидками
app.use("/shop",discountRouter);

app.listen(PORT,() => console.log("Server is working ... "));

productRouter.js

const Router = require("express");
const router = new Router();
const productController = require("../controllers/productControllers");

// Получаем все товары
router.get("/products",async (req,res,next) => {
    const resultOfgetAllProducts = await productController.all();
    if(resultOfgetAllProducts === Error) {
        return res.sendStatus(500).json(Error);
    } else {
        return res.sendStatus(200).json(resultOfgetAllProducts);
    };
});

// Получаем конкретный товар
router.get("/product/:id",next) => {
    if(!req.params.id) return res.sendStatus(400).send("Product ID is not specified.");
    const id = req.params.id;
    const result = null;
    const resultOfgetOneProduct = await productController.one(id,result);
    if(resultOfgetOneProduct === Error) {
        return res.sendStatus(500).json(Error);
    } else {
        return res.sendStatus(200).json(resultOfgetOneProduct);
    };
});

// Добавляем товар
router.post("/product",next) => {
    if(!req.body) return res.sendStatus(400).send("Product parameters are not specified.");
    const product = {
        product_name: req.body.product_name,price: req.body.price,product_description: req.body.product_description
    };
    const result = null;
    const resultOfCreateProduct = await productController.create(product,result);
    if (resultOfCreateProduct === Error) {
        return res.sendStatus(500).json(Error);
    } else {
        return res.sendStatus(200).send("The product has been created.");
    }
});

// Обновляем товар
router.put("/product/:id",next) => {
    if(!req.params.id) return res.sendStatus(400).send("Product ID is not specified.");
    if(!req.body) return res.sendStatus(400).send("Product parameters are not specified.");
    const product = {
        product_name: req.body.product_name,product_description: req.body.product_description
    }
    const id = {id: req.params.id};
    const result = null;
    const resultOfUpdateProduct = await productController.update(id,product,result);
    if(resultOfUpdateProduct === Error) {
        return res.sendStatus(500).json(Error);
    } else {
        return res.sendStatus(200).send("The product has been updated.");
    };
});

// Удаляем товар
router.delete("/product/:id",next) => {
    if(!req.params.id) return res.sendStatus(400).send("Product ID is not specified.");
    const id = {id: req.params.id};
    const result = null;
    const resultOfDeleteProduct = await productController.delete(id,result);
    if(resultOfDeleteProduct === Error) {
        return res.sendStatus(500).json(Error);
    } else {
        return res.sendStatus(200).send("The product has been deleted.");
    }
});


module.exports = router;

productControllers.js

const productModels = require("../models/productModels");

exports.all = async function getAllProducts() {
    const result = await productModels.all(function(err,docs) {
        if (err) {
            console.log(err);
            return err;
        } else {
            return docs;
        };
    });
    return result;
};

exports.one = async function getoneProduct(id,cb) {
    const result = await productModels.one(id,function(err,doc) {
        if (err) {
            console.log(err);
            return err;
        } else {
            return doc; 
        }
    });
    cb = result;
    return cb;
};

exports.create = async function createProduct(product,cb) {
    const confirmationOfCreate = await productModels.create(product,result) {
        if (err) {
            console.log(err);
            return err;
        } else {
            return result;
        }
    });
    cb = confirmationOfCreate;
    return cb;
};

exports.update = async function updateProduct(id,cb) {
    const confirmationOfUpdate = await productModels.update(id,result) {
        if (err) {
            console.log(err);
            return err;
        } else {
            return result;
        }
    });
    cb = confirmationOfUpdate;
    return cb;
};

exports.delete = async function deleteProduct(id,cb) {
    const confirmationOfDelete = await productModels.delete(id,result) {
        if (err) {
            console.log(err);
            return err;
        } else {
            return result;
        }
    });
    cb = confirmationOfDelete;
    return cb;
};

productModels.js

const Sequelize = require("sequelize");
const productsModel = require("./products.js");
const db = require("./index.js");

// Получаю с бд все продукты
exports.all = async function getProducts(cb) {
    //const products = await db.query('SELECT * FROM products');
    const products = await db.findAll({raw: true});
    if(products === null) {
        return cb(Error,null);
    } else {
        return cb(null,products);
    };
};

// Получаю с бд конкретный продукт
exports.one = async function getoneProduct(id,cb) {
    //const getoneQuery = 'SELECT * FROM product where id = $1';
    //const getdiscount = 'SELECT * FROM discounts where product_id = $1';
    //const curdiscount = await discount.findOne({where: id});
    const product = await db.findAll({where: {id: id}});
    const productdiscount = await discount.findAll({where: {product_id: id}});
    const priceWithdiscount = product.price - (product.price * ((productdiscount.discount)/100));
    if (product === null) {
        return cb(Error,null);
    } else if(productdiscount === null) {
        return cb(null,product)
    } else {
        product.price = priceWithdiscount;
        const result = product;
        return cb(null,result);
    };
};

// Создаю в бд продукт
exports.create = async function createProduct(product,cb) {
    // const createquery = 'INSERT INTO product (product_name,price,product_description) values ($1,$2,$3) RETURNING *';
    // const arrayQuery = [product.product_name,product.price,product.product_description];
    // const newProduct = await db.query(createquery,arrayQuery);    
    const newProduct = await db.create(product);
    if(newProduct === null) {
        return cb(Error,newProduct);
    };
};

// Обновляю в бд конкретный продукт
exports.update = async function updateProduct(id,newData,cb) {
    // const updateQuery = 'UPDATE product set product_name = $1,price = $2,product_description = $3 where id = $4 RETURNING *';
    // const arrayQuery = [newData.product_name,newData.price,newData.product_description,id];
    const product = await db.update(newData,{where: id});
    if(product === null) {
        return cb(Error,product);
    };
};

// Удаляю в бд конкретный продукт
exports.delete = async function deleteProduct(id,cb) {
    //const deleteQuery = 'DELETE FROM product where id = $1';
    const product = await db.destroy({where: id});
    if(product === null) {
        return cb(Error,product);
    };
};

product.js

'use strict';
const {
  Model
} = require('sequelize');
module.exports = (sequelize,DataTypes) => {
  class products extends Model {
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate(models) {
      // define association here
    }
  };
  products.init({
    product_name: DataTypes.STRING,price: DataTypes.NUMBER,product_description: DataTypes.STRING
  },{
    sequelize,modelName: 'products',});
  return products;
};

index.js

'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable],config);
} else {
  sequelize = new Sequelize(config.database,config.username,config.password,config);
}

fs
  .readdirsync(__dirname)
  .filter(file => {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
  })
  .forEach(file => {
    const model = require(path.join(__dirname,Sequelize.DataTypes);
    db[model.name] = model;
  });

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

我还有迁移和配置文件

我必须做什么才能发出此错误或其他问题?

解决方法

<div class="btns-A"> <div><a href="https://google.com" class="btn-A" onclick="window.open(this.href,'_blank');return false;">Go to Google</a></div> <div><a href="https://stackoverflow.com" class="btn-A">Go to Stack</a></div> </div> 移动到 'repository' 目录 因为,此文件中没有“默认”导出

而且,db操作文件不能放在models文件夹中

enter image description here 我解决了这个问题,然后上传到 git https://github.com/nkhs/node-sq-stack.git