Ошибка типа необработанного отклонения: Роль.Create — это не ошибка функции

#javascript #node.js #express #sequelize.js

#javascript #node.js #выразить #sequelize.js

Вопрос:

Я застрял на .create не является ошибкой функции, когда я пытаюсь повторно заполнить свою базу данных при перезапуске nodemon. У меня это работало ранее, и все таблицы заполнены нормально, я продолжаю отмечать эту ошибку. Я использую Node, Express, Sequelize и Postgres pgAdmin4.

Я читал по аналогичным темам, что a; в 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:UsersJames GreeneWebstormProjectssoftwaredevprojectSustainableScubabackendserver.js:86:11)

    at C:UsersJames GreeneWebstormProjectssoftwaredevprojectSustainableScubabackendserver.js:63:5

    at tryCatcher (C:UsersJames GreeneWebstormProjectssoftwaredevprojectSustainableScubabackendnode_modulessequelizenode_modulesbluebirdjsrelea

seutil.js:16:23)

    at Promise._settlePromiseFromHandler (C:UsersJames GreeneWebstormProjectssoftwaredevprojectSustainableScubabackendnode_modulessequelizenode_mo

dulesbluebirdjsreleasepromise.js:547:31)

    at Promise._settlePromise (C:UsersJames GreeneWebstormProjectssoftwaredevprojectSustainableScubabackendnode_modulessequelizenode_modulesblueb

irdjsreleasepromise.js:604:18)

    at Promise._settlePromise0 (C:UsersJames GreeneWebstormProjectssoftwaredevprojectSustainableScubabackendnode_modulessequelizenode_modulesblue

birdjsreleasepromise.js:649:10)

    at Promise._settlePromises (C:UsersJames GreeneWebstormProjectssoftwaredevprojectSustainableScubabackendnode_modulessequelizenode_modulesblue

birdjsreleasepromise.js:729:18)

    at _drainQueueStep (C:UsersJames GreeneWebstormProjectssoftwaredevprojectSustainableScubabackendnode_modulessequelizenode_modulesbluebirdjs

releaseasync.js:93:12)

    at _drainQueue (C:UsersJames GreeneWebstormProjectssoftwaredevprojectSustainableScubabackendnode_modulessequelizenode_modulesbluebirdjsrele

aseasync.js:86:9)

    at Async._drainQueues (C:UsersJames GreeneWebstormProjectssoftwaredevprojectSustainableScubabackendnode_modulessequelizenode_modulesbluebird

jsreleaseasync.js:102:5)

    at Immediate.Async.drainQueues [as _onImmediate] (C:UsersJames GreeneWebstormProjectssoftwaredevprojectSustainableScubabackendnode_modulesseque

lizenode_modulesbluebirdjsreleaseasync.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 amp; other shellfish", "Corals and other invertebrates", "Marine mammals", "Ocean fishes", "Sea Turtles amp; 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;
 

Комментарии:

1. Кажется, что в строке db.userRole = ["User", "School", "SiteAdmin", "SuperUser"]; вы перезаписываете db.userRole определение, ранее объявленное как модель в db.userRole = require("./userRole.model")(sequelize, Sequelize);

2. Ваше здоровье, у меня все получилось. Ранее он инициализировал его с помощью записей в индексном файле, но по какой-то причине не разрешил это во второй раз.

Ответ №1:

В моем случае это была проблема с импортом. Посмотрите ниже.

неправильно

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

исправить

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