Node.js 节点sequelize postgres方言为类型sequelize.INTEGER和autoincrement:true持续创建INTEGER类型的id,而不是SERIAL类型的id

Node.js 节点sequelize postgres方言为类型sequelize.INTEGER和autoincrement:true持续创建INTEGER类型的id,而不是SERIAL类型的id,node.js,postgresql,sequelize.js,Node.js,Postgresql,Sequelize.js,我正在学习node sequelize mysql的教程,但我使用的是postgresql。 据我所知,sequelize包将自动将autoincrement true转换为postgres方言中的串行数据类型,但对我来说,它一直在执行“id”整数 这就是我初始化续集的方式 const Sequelize=require('Sequelize')) const sequelize=new sequelize('my-database-name','postgres','mypassword','

我正在学习node sequelize mysql的教程,但我使用的是postgresql。 据我所知,sequelize包将自动将autoincrement true转换为postgres方言中的串行数据类型,但对我来说,它一直在执行“id”整数

这就是我初始化续集的方式

const Sequelize=require('Sequelize'))
const sequelize=new sequelize('my-database-name','postgres','mypassword','{
方言:“postgres”,
方案:“博士后”,
主机:“localhost”,
端口:“5432”,
})
module.exports=sequelize
这就是我初始化模型的方式

const Sequelize=require('Sequelize'))
const sequelize=require(“../util/database”)
const Product=sequelize.define('Product'{
身份证:{
类型:Sequelize.INTEGER,
自动递增:真,
primaryKey:没错,
},
标题:Sequelize.STRING,
价格:{
类型:Sequelize.DOUBLE,
allownull:错,
},
图像URL:{
类型:Sequelize.STRING,
allownull:错,
},
说明:{
类型:Sequelize.STRING,
allownull:错,
},
})
module.exports=产品
这是我运行服务器的app.js

const path=require('path'))
const express=require('express')
const bodyParser=require('body-parser')
const errorController=require(“./controllers/error”)
const sequelize=require('./util/database')
const app=express()
应用程序集('查看引擎','哈巴狗')
app.set('视图','视图')
const adminRoutes=require(“./routes/admin”)
const shopRoutes=需要('./路线/车间')
use(bodyParser.urlencoded({extended:false}))
app.use(express.static(path.join(uu dirname,'public'))
app.use('/admin',adminRoutes)
应用程序使用(shopRoutes)
应用程序使用(errorController.get404)
续集
.sync()
。然后(结果=>{
//console.log(结果)
app.listen(3000)
})
.catch(err=>console.log(err))
这是我从终点站得到的

[nodemon]启动`node app.js`
执行(默认):如果不存在“products”(“id”整数、“title”VARCHAR(255)、“price”双精度、“imageUrl”VARCHAR(255)、“description”VARCHAR(255)、“createdAt”时区不为空的时间戳、“updatedAt”时区不为空的时间戳,则创建表
时区不为空,主键(“id”);
执行(默认):选择i.relname作为名称,ix.indprimary作为主要,ix.indunique作为唯一,ix.indkey作为indkey,array_agg(a.attnum)作为列索引,array_agg(a.attname)作为列名称,pg_get_indexdef(ix.indexrelid)作为pg_class t,pg_class i,pg_index ix的定义,pg_属性a,其中t.oid=ix.indrelid和i.oid=ix.indexrelid和a.attrelid=t.oid和t.relkind='r'和t.relname='products'按i.relname分组,ix.indexrelid,ix.indprimary,ix.indisunique,ix.indkey按i.relname排序;
我希望能执行这个命令

执行(默认):如果不存在“产品”(“id”序列主键),则创建表。。。
因为每当我添加新记录时都会出现此错误

执行(默认):在“产品”(“id”、“标题”、“价格”、“图像URL”、“说明”、“创建数据”、“更新数据”)中插入值($1、$2、$3、$4、$5、$6、$7),返回*;
DatabaseError[SequelizeDatabaseError]:列“id”中的null值违反了NOTNULL约束
我有instal——保存pg和sequelize包

{
...
  "devDependencies": {
    "nodemon": "^1.18.3"
  },
  "dependencies": {
    "body-parser": "^1.18.3",
    "ejs": "^3.0.1",
    "express": "^4.16.3",
    "express-handlebars": "^3.1.0",
    "pg": "^7.17.1",
    "pug": "^2.0.4",
    "sequelize": "^5.21.3"
  }
}

您不需要将id作为模型的一部分添加,sequelize可以帮助您自行处理这一部分


const sequelize = require('../util/database')

const Product = sequelize.define('product', {
    title: Sequelize.STRING,
    price: {
        type: Sequelize.DOUBLE,
        allownull: false,
    },
    imageUrl: {
        type: Sequelize.STRING,
        allownull: false,
    },
    description: {
        type: Sequelize.STRING,
        allownull: false,
    },
})

module.exports = Product
保持这样,它会自行处理的