I am trying to create tables using Sequelize programitacally but its continuously showing that the table does not exist, even after using {force:true}. Please do have a look at the code below and kindly help.
App.js
const express = require("express");
const app = express();
const addCompany = require("./controller/routes/addCompany");
const sqlize = require(".//../data/database/database")
const { Company, company } = require("../src/model/companyData")
const {salesUser, team} = require("../src/model/teamData")
const salesTeam = require("./controller/routes/salesTeam")
app.set("view engine", "ejs");
app.use(express.static("views"));
app.use("/company", addCompany.router);
app.use("/team", salesTeam.router)
sqlize
.sync({ force: true })
.then(result => {
// console.log(result);
app.listen(3000);
})
.catch(err => {
console.log(err);
});
MODELS :
companyData.js
const { Sequelize, DataTypes } = require('sequelize');
const sqlize = require("../../data/database/database")
const company = sqlize.define('Company', {
// Model attributes are defined here
cname: {
type: DataTypes.TEXT,
allowNull : false
},
id: {
type: DataTypes.STRING,
allowNull: false,
primaryKey : true
},
revenue: {
type: DataTypes.DOUBLE,
allowNull : false
},
country: {
type: DataTypes.STRING
}
}
);
class Company {
constructor(cname, id, revenue, country) {
this.cname = cname
this.id = id
this.revenue = revenue
this.country = country
}
async save() {
//console.log(this)
let newCompany = company.build(this);
await newCompany.save();
console.log('Saved to the database!');
}
async fetch() {
let companyData = await company.findAll();
//console.log(companyData)
//console.log(companyData.every(el => el instanceof company));
//console.log("All users:", JSON.stringify(companyData));
let cData = JSON.stringify(companyData, null, 2)
//console.log("CDATA +++++++++",JSON.parse(cData))
let fetchData = []
cData = JSON.parse(cData)
cData.forEach(el =>
fetchData.push({
'cname': el.cname,
'id': el.id,
'revenue': el.revenue,
'country': el.country
}))
//console.log(fetchData)
return fetchData
}
async delete(id) {
await company.destroy({ where: { id: id } });
}
async edit(newData) {
let oldID = newData.oldID
const entry = await company.findByPk(oldID);
if (entry === null) {
console.log('Not found!');
} else {
console.log(entry instanceof company); // true
console.log(entry.dataValues)
let oldID = newData.oldID
delete newData.oldID
console.log(newData)
await company.update(
newData,
{
where: {id: oldID}
}
);
await this.fetch()
}
}
}
module.exports = {
Company: Company,
company: company
}
MODELS
teamData.js
const { Sequelize, DataTypes } = require('sequelize');
const sqlize = require("../../data/database/database")
const team = sqlize.define('salesTeam', {
// Model attributes are defined here
empName: {
type: DataTypes.STRING,
allowNull : false
},
empID: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey : true
}
}
);
class salesUser {
constructor(empName, empID) {
this.empName = empName
this.empID = empID
}
async save() {
//console.log(this)
let newUser = team.build(this);
await newUser.save();
console.log('Saved to the database!');
}
async fetch() {
try {
let salesUserData = await team.findAll()
//console.log(companyData)
//console.log(companyData.every(el => el instanceof company));
//console.log("All users:", JSON.stringify(companyData));
let sData = JSON.stringify(salesUserData, null, 2)
//console.log("CDATA +++++++++",JSON.parse(cData))
let fetchData = []
sData = JSON.parse(sData)
sData.forEach(el =>
fetchData.push({
'empName': el.empName,
'empID': el.empID
}))
//console.log(fetchData)
return fetchData
}
catch (err) {
console.error(err)
}
}
async delete(id) {
await company.destroy({ where: { empID: id } });
}
async edit(newData) {
let oldempID = newData.oldempID
const entry = await company.findByPk(oldempID);
if (entry === null) {
console.log('Not found!');
} else {
console.log(entry instanceof team); // true
console.log(entry.dataValues)
let oldempID = newData.oldempID
delete newData.oldempID
console.log(newData)
await team.update(
newData,
{
where: {empID: oldempID}
}
);
await this.fetch()
}
}
}
module.exports = {
salesUser: salesUser,
team: team
}
DATABASE
database.js
const Sequelize = require('sequelize');
const sqlize = new Sequelize('node-database', 'root', 'password', {
dialect: 'mysql',
host: 'localhost'
});
module.exports = sqlize;
ERROR I AM FACING :
……….
Executing (default): SELECT cname
, id
, revenue
, country
, createdAt
, updatedAt
FROM Companies
AS Company
;
Executing (default): SELECT empName
, empID
, createdAt
, updatedAt
FROM salesTeams
AS salesTeam
;
node:internal/process/promises:246
triggerUncaughtException(err, true /* fromPromise */);
^
Error
at Query.run (D:Node.js FolderTest 1node_modulessequelizelibdialectsmysqlquery.js:52:25)
at D:Node.js FolderTest 1node_modulessequelizelibsequelize.js:311:28
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async MySQLQueryInterface.select (D:Node.js FolderTest 1node_modulessequelizelibdialectsabstractquery-interface.js:407:12)
at async Function.findAll (D:Node.js FolderTest 1node_modulessequelizelibmodel.js:1134:21)
at async Company.fetch (D:Node.js FolderTest 1srcmodelcompanyData.js:63:27) {
name: 'SequelizeDatabaseError',
parent: Error: Table 'node-database.companies' doesn't exist
at Packet.asError (D:Node.js FolderTest 1node_modulesmysql2libpacketspacket.js:728:17)
at Query.execute (D:Node.js FolderTest 1node_modulesmysql2libcommandscommand.js:29:26)
at Connection.handlePacket (D:Node.js FolderTest 1node_modulesmysql2libconnection.js:456:32)
at PacketParser.onPacket (D:Node.js FolderTest 1node_modulesmysql2libconnection.js:85:12)
at PacketParser.executeStart (D:Node.js FolderTest 1node_modulesmysql2libpacket_parser.js:75:16)
at Socket.<anonymous> (D:Node.js FolderTest 1node_modulesmysql2libconnection.js:92:25)
at Socket.emit (node:events:390:28)
at addChunk (node:internal/streams/readable:315:12)
at readableAddChunk (node:internal/streams/readable:289:9)
at Socket.Readable.push (node:internal/streams/readable:228:10) {
code: 'ER_NO_SUCH_TABLE',
errno: 1146,
sqlState: '42S02',
sqlMessage: "Table 'node-database.companies' doesn't exist",
sql: 'SELECT `cname`, `id`, `revenue`, `country`, `createdAt`, `updatedAt` FROM `Companies` AS `Company`;',
parameters: undefined
},
original: Error: Table 'node-database.companies' doesn't exist
at Packet.asError (D:Node.js FolderTest 1node_modulesmysql2libpacketspacket.js:728:17)
at Query.execute (D:Node.js FolderTest 1node_modulesmysql2libcommandscommand.js:29:26)
at Connection.handlePacket (D:Node.js FolderTest 1node_modulesmysql2libconnection.js:456:32)
at PacketParser.onPacket (D:Node.js FolderTest 1node_modulesmysql2libconnection.js:85:12)
at PacketParser.executeStart (D:Node.js FolderTest 1node_modulesmysql2libpacket_parser.js:75:16)
at Socket.<anonymous> (D:Node.js FolderTest 1node_modulesmysql2libconnection.js:92:25)
at Socket.emit (node:events:390:28)
at addChunk (node:internal/streams/readable:315:12)
at readableAddChunk (node:internal/streams/readable:289:9)
at Socket.Readable.push (node:internal/streams/readable:228:10) {
code: 'ER_NO_SUCH_TABLE',
errno: 1146,
sqlState: '42S02',
sqlMessage: "Table 'node-database.companies' doesn't exist",
sql: 'SELECT `cname`, `id`, `revenue`, `country`, `createdAt`, `updatedAt` FROM `Companies` AS `Company`;',
parameters: undefined
},
sql: 'SELECT `cname`, `id`, `revenue`, `country`, `createdAt`, `updatedAt` FROM `Companies` AS `Company`;',
parameters: {}
}
[nodemon] app crashed - waiting for file changes before starting...