I Trying to Created a Table “Food” using Sequalize ORM, But When i using sequalize.sync(), table cannot created in PG Admin 4. How To Fix This.
I See In Documentation But Not Helping Me
Config.ts
import { Sequelize } from "sequelize";
const sequelize = new Sequelize({
database : 'seblak_super',
username : 'admin',
password : 'admin',
host : 'localhost',
port : 5432,
dialect : 'postgres'
})
export default sequelize
Food.ts
import { DataTypes, Model } from "sequelize";
import sequelize from "../../../configs/database";
class Food extends Model {
declare id: string;
declare name: string;
declare description: string;
declare price: string;
}
Food.init(
{
id: {
type: DataTypes.UUIDV4,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
unique: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
description: {
type: DataTypes.TEXT,
allowNull: false,
},
price: {
type: DataTypes.NUMBER,
allowNull: false,
},
},
{ modelName: "Food", sequelize: sequelize }
);
Index.ts
import express, { Request, Response } from "express";
import sequelize from "./src/configs/database";
const app = express();
const port = 3000;
sequelize
.authenticate()
.then(() => console.log("Connected"))
.catch((error) => console.log(error));
sequelize
.sync({ force: true })
.then(() => console.log("Create Model"))
.catch((error) => console.log(error));
app.get("/", (req: Request, res: Response) => {
res.send("Hello World!");
});
app.listen(port, () => {
console.log(`Server is listening at http://localhost:${port}`);
});
And This is The Result In My Terminal.
How To Fix This?, Chatgpt not give me good answer.
3
Here you have to initialize all your models. It’s up to you how you set up your Sequelize. For a basic example, you can assign it in your config file like this:
Config.ts
import { Sequelize } from "sequelize";
import Food from "../models/Food";
const sequelize = new Sequelize({
database : 'seblak_super',
username : 'admin',
password : 'admin',
host : 'localhost',
port : 5432,
dialect : 'postgres'
});
// initialize all models
sequelize.models.Food = Food;
export default sequelize;
Wrong Datatypes for id
should be UUID and price
should be DECIMAL
Food.ts
import { DataTypes, Model } from "sequelize";
import sequelize from "../../../configs/database";
class Food extends Model {
declare id: string;
declare name: string;
declare description: string;
declare price: string;
}
Food.init(
{
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
unique: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
description: {
type: DataTypes.TEXT,
allowNull: false,
},
price: {
type: DataTypes.DECIMAL,
allowNull: false,
},
},
{ modelName: "Food", sequelize: sequelize }
);
export default Food;
Index.ts
import express, { Request, Response } from "express";
import sequelize from "./src/configs/database";
const app = express();
const port = 3000;
sequelize
.authenticate()
.then(async () => {
await sequelize.query("SELECT 1+1");
console.log("Connected");
// move sync function to execute after connection got established
sequelize
.sync({ force: true })
.then(() => console.log("Create Model"))
.catch((error) => console.log(error));
})
.catch((error) => console.log(error));
app.get("/", (req: Request, res: Response) => {
res.send("Hello World!");
});
app.listen(port, () => {
console.log(`Server is listening at http://localhost:${port}`);
});
2