【问题标题】:Unhandled rejection TypeError: Role.Create is not a function error未处理的拒绝 TypeError: Role.Create is not a function 错误
【发布时间】:2021-01-12 14:07:42
【问题描述】:

当我重新启动 nodemon 时尝试重新填充我的数据库时,我遇到了 .create is not a function 错误。我以前有过这个工作,所有的表格都很好,我一直被标记为这个错误。我正在使用 Node、Express、Sequelize 和 Postgres pgAdmin4。

我读过类似的主题 a ; in node 可能会导致这样的错误,但我已经尝试了一些方法,仍然得到同样的错误。

//const Sequelize = require('sequelize')
const express = require("express");
const bodyParser = require ("body-parser");
// const { Sequelize, Op, Model, DataTypes } = require("sequelize");
// import authRoute from './server/routes/auth.routes';
// import postRoutes from './server/routes/diveLog.routes';
const cors = require("cors");

// creates an en express app
const app = express();

// set origin to 5002
// var corsOptions = {
//    origin: "http://localhost:5002"
//}
 // add bp and cors using api.use method

// parse requests of content type app/json
// app.use(cors(corsOptions));

app.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*');
    res.header(
        'Access-Control-Allow-Headers',
        'Origin, X-Requested-With, Content-Type, Accept',
    );
    next();
});

// parse requests of content-type
app.use(bodyParser.json());

//bp used to process form data as json
app.use(bodyParser.urlencoded({ extended: true }));

//database
const db = require("./server/models");
//const sequelize = require("pg");
const Role = db.userRole;
//const DivingSchool = db.approvedDivingSchool;
const Current = db.currentLevel;
const DiveType = db.diveType;
const DiveRegion = db.diveRegion;
const Visibility = db.visibilityLevel;
const DiveAgency = db.diveAgency;
const Certifications = db.diveCertification;
const MarineType = db.marineType;

//const user = db.userLogin;

try {
    db.sequelize.authenticate();
    console.log('Connection made to the database made.');
    } catch (error) {
    console.error('unable to connect:', error);
}

// db.sequelize.sync();
// force: true will drop the table if it already exists
db.sequelize.sync({ force: false })
    .then(() => {
    console.log(`Drop and resync database with { force: true }`)
    initial()
});

// simple route
app.get('/', (req, res) => {
    res.json({ message: "connected to the sustainable scuba database." });
});

// routes
require('./server/routes/auth.routes')(app);
require('./server/routes/user.routes')(app);
require('./server/routes/diveLog.routes')(app);
require('./server/routes/diveSchool.routes')(app);

// set port, listen for requests
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
    console.log(`Server is now running on PORT ${PORT}.`);
});


function initial() {

     Role.create({
            userRoleID: 1,
            userRoleName: "User"
         });
         Role.create({
               userRoleID: 2,
               userRoleName: "School"
         });
         Role.create({
               userRoleID: 3,
               userRoleName: "SiteAdmin"
         });
         Role.create({
               userRoleID: 4,
               userRoleName: "SuperUser"
         });
}

错误信息:

Unhandled rejection TypeError: Role.create is not a function

    at initial (C:\Users\James Greene\WebstormProjects\softwaredevproject\SustainableScuba\backend\server.js:86:11)

    at C:\Users\James Greene\WebstormProjects\softwaredevproject\SustainableScuba\backend\server.js:63:5

    at tryCatcher (C:\Users\James Greene\WebstormProjects\softwaredevproject\SustainableScuba\backend\node_modules\sequelize\node_modules\bluebird\js\relea

se\util.js:16:23)

    at Promise._settlePromiseFromHandler (C:\Users\James Greene\WebstormProjects\softwaredevproject\SustainableScuba\backend\node_modules\sequelize\node_mo

dules\bluebird\js\release\promise.js:547:31)

    at Promise._settlePromise (C:\Users\James Greene\WebstormProjects\softwaredevproject\SustainableScuba\backend\node_modules\sequelize\node_modules\blueb

ird\js\release\promise.js:604:18)

    at Promise._settlePromise0 (C:\Users\James Greene\WebstormProjects\softwaredevproject\SustainableScuba\backend\node_modules\sequelize\node_modules\blue

bird\js\release\promise.js:649:10)

    at Promise._settlePromises (C:\Users\James Greene\WebstormProjects\softwaredevproject\SustainableScuba\backend\node_modules\sequelize\node_modules\blue

bird\js\release\promise.js:729:18)

    at _drainQueueStep (C:\Users\James Greene\WebstormProjects\softwaredevproject\SustainableScuba\backend\node_modules\sequelize\node_modules\bluebird\js\

release\async.js:93:12)

    at _drainQueue (C:\Users\James Greene\WebstormProjects\softwaredevproject\SustainableScuba\backend\node_modules\sequelize\node_modules\bluebird\js\rele

ase\async.js:86:9)

    at Async._drainQueues (C:\Users\James Greene\WebstormProjects\softwaredevproject\SustainableScuba\backend\node_modules\sequelize\node_modules\bluebird\

js\release\async.js:102:5)

    at Immediate.Async.drainQueues [as _onImmediate] (C:\Users\James Greene\WebstormProjects\softwaredevproject\SustainableScuba\backend\node_modules\seque

lize\node_modules\bluebird\js\release\async.js:15:14)

    at processImmediate (internal/timers.js:439:21)

index.js

const config = require("../../config/db.config.js");

const Sequelize = require("sequelize");
const sequelize = new Sequelize(
      config.DB,
      config.USER,
      config.PASSWORD,

    {
      host: config.HOST,
      dialect: config.dialect,
      operatorsAliases: false,
        //logging: (...msg) => console.log(msg),

        pool: {
            max: config.pool.max,
            min: config.pool.min,
            acquire: config.pool.acquire,
            idle: config.pool.idle
        }
      }
     );

const db = {};

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

db.userLogin = require("./userLogin.model")(sequelize, Sequelize);
db.userRole = require("./userRole.model")(sequelize, Sequelize);
db.diveLog = require("./diveLog.model.js")(sequelize, Sequelize);
db.visibilityLevel = require("./visibility.model.js")(sequelize, Sequelize);
db.diveType = require("./diveType.model.js")(sequelize, Sequelize);
db.currentLevel = require("./currentLevel.model.js")(sequelize, Sequelize);
db.approvedDivingSchool = require("./approvedDivingSchool.model.js")(sequelize, Sequelize);
db.diveRegion = require("./diveRegion.model.js")(sequelize, Sequelize);
db.diveAgency = require("./diveAgency.model")(sequelize, Sequelize);
db.diveCertification = require("./diveCertifications.model")(sequelize, Sequelize);
db.marineLife = require("./marineLife.model")(sequelize, Sequelize);
db.diveSpot = require("./diveLog.model")(sequelize, Sequelize);
db.article = require("./articles.model")(sequelize, Sequelize);



/* db.userRole.belongsTo(db.userLogin, {
  through: "fk_userRoles",
  foreignKey: "userRoleID",
  otherKey: "userRole"
});
//db.userLogin.belongsTo(db.userRole, {
//  through: "fk_userRoles",
//  foreignKey: "userRole",
//  otherKey: "userRoleID"
//});
db.diveLog.belongsTo(db.visibilityLevel, {
    through: "fk_visibility",
    foreignKey: "diveVisibilityID",
    otherKey: "visibilityID"
});
//db.visibilityLevel.belongsTo(db.diveLog, {
//    through: "fk_visibility",
//    foreignKey: "visibilityID",
//    otherKey: "diveVisibilityID"
//});
db.diveLog.belongsTo(db.currentLevel, {
    through: "fk_current",
    foreignKey: "diveCurrentID",
    otherKey: "currentID"
});
db.currentLevel.belongsTo(db.diveLog, {
    through: "fk_visibility",
    foreignKey: "currentID",
    otherKey: "diveCurrentID"
});
db.diveLog.belongsTo(db.approvedDivingSchool, {
    through: "fk_divingSchool",
    foreignKey: "diveSchoolNameID",
    otherKey: "diveSchoolID"
});
db.approvedDivingSchool.belongsTo(db.diveLog, {
    through: "fk_divingSchool",
    foreignKey: "diveSchoolID",
    otherKey: "diveSchoolNameID"
});
db.diveLog.belongsTo(db.diveType, {
    through: "fk_diveType",
    foreignKey: "diveTypeID",
    otherKey: "diveTypeID"
});
db.diveType.belongsTo(db.diveLog, {
    through: "fk_diveType",
    foreignKey: "diveTypeID",
    otherKey: "diveTypeID"
});
db.diveLog.belongsTo(db.userLogin, {
    through: "fk_userID",
    foreignKey: "diverUserNumber",
    otherKey: "userID"
});
db.userLogin.belongsTo(db.diveLog, {
    through: "fk_userID",
    foreignKey: "userID",
    otherKey: "diverUserNumber"
});
db.approvedDivingSchool.belongsTo(db.diveLocation, {
    through: "fk_diveLocation",
    foreignKey: "diveSchoolLocation",
    otherKey: "diveLocationID"
});
db.diveLocation.belongsTo(db.approvedDivingSchool, {
    through: "fk_diveLocation",
    foreignKey: "diveLocationID",
    otherKey: "diveSchoolLocation"
});
 */

db.userRole = ["User", "School", "SiteAdmin", "SuperUser"];
db.diveType = ["Recreational", "Training", "Night Dive", "Deep Dive", "Drift", "Wreck", "Cave", "Reef", "Photo", "Research"];
db.VisibilityLevel = ["Bad < 5 m>", "Average 5-10 m", "Good 10-25 m", "Excellent > 25 m"];
db.currentLevel = ["Light > 1 knot", "Medium 1-2 knots", "Strong 2-3 knots", "Extreme > 2 knots"];
db.diveRegion = ["Europe", "North America", "South America", "Africa", "Oceania", "Asia"];
db.userLogin = ["Dummy", "dummy", "dummy@dummy.com", "Dummy", "Dummy"];
db.diveAgency = ["PADI", "SSI", "NAUI", "SDI"];
db.marineType = ["Cephalopods, crustaceans & other shellfish", "Corals and other invertebrates", "Marine mammals", "Ocean fishes", "Sea Turtles & Reptiles", "Sharks and Rays", "Marine Science and Ecosystems"];
db.diveCertification = ["Open Water", "Open Water Adv", "Open Water Instructor", "Divemaster", "Divemaster", "Freediver Basic", "Freediver Adv", "Freediver Instructor", "Freediver Master", "Dive Theory", "Digital Underwater Photographer", "Underwater Videographer", "Deep Diver", "Night Diver", "Ice Diver", "Cavern Diver", "Sus Scub Aware Campaign", "Sus Scub Aware Instructor", "Sus Scub Shark Conservation", "Dive Against Debris Speciality"];

module.exports = db;

【问题讨论】:

  • 似乎在db.userRole = ["User", "School", "SiteAdmin", "SuperUser"]; 行中,您正在覆盖之前在db.userRole = require("./userRole.model")(sequelize, Sequelize); 中声明为模型的db.userRole 定义
  • 干杯,让它工作。它之前使用索引文件中的条目对其进行了初始化,但由于某种原因不允许它第二次进行。

标签: javascript node.js express sequelize.js


【解决方案1】:

就我而言,这是导入的问题。往下看。

错误

const RoleModel = require("../models/role.model");

正确

const { RoleModel } = require("../models/role.model");

【讨论】:

    猜你喜欢
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2021-08-20
    • 2019-07-20
    • 2021-08-01
    相关资源
    最近更新 更多