Node 配置sequelize + mysql,根据模型自动创建数据库表
简介 研究了一下午的node + sequelize + mysql。
<p>config/index.js mysql数据信息</p>
<pre class="language-javascript"><code>// mysql连接配置
const MYSQL_CONF = {
host: process.env.NODE_ENV === 'production' ? 'www.xxxx.com' : 'localhost',
dialect: 'mysql',
username: 'root',
password: '123456',
port: '3000',
database: 'name_sql',
acquireTimeout: 1000000, // 连接超时时间
connectionLimit: 100, // 最大连接数
waitForConnections: true, // 超过最大连接时排队
queueLimit: 0, // 排队最大数量(0 代表不做限制)
multipleStatements: true, // 同时执行多条sql语句
useConnectionPooling: true // 开启线程池
}
module.exports = {
MYSQL_CONF
}</code></pre>
<p>config/sqeConfig.js 链接配置文件</p>
<pre class="language-javascript"><code>'use strict'
const Sequelize = require('sequelize');
const {
database,
username,
password,
host,
dialect,
port
} = require('./index').MYSQL_CONF;
const sequelize = new Sequelize(database, username, password, {
dialect, // 数据库类型
host,
port,
logging: true,
timezone: '+08:00',
define: {
timestamps: true, // true为模型添加createAt 和updatedAt
paranoid: true, // 删除
createdAt:'created_at',
updatedAt:'updated_at',
deletedAt:'deleted_at',
underscored: true, // 下滑线连接
freezeTableName:true,
scopes:{
bh:{
attributes:{
exclude:['updated_at','deleted_at','created_at']
}
}
}
},
pool: { // 使用连接池连接,默认为true
max: 50,
min: 0,
idle: 30000
}
})
// 测试连接是否成功
try {
sequelize.authenticate();
console.log('Connection has been established successfully.');
} catch (error) {
console.error('Unable to connect to the database:', error);
}
// 根据 model自动创建表
sequelize.sync({ force: false })
.then(() => {
console.log('init db ok')
})
.catch(err => {
console.log('init db error', err)
})
module.exports = {sequelize};
</code></pre>
<p>models/User.js 用户模型</p>
<pre class="language-javascript"><code>const bcrypt = require('bcryptjs')
const { sequelize } = require('../config/SqeDbConfig');
const { Sequelize, Model } = require('sequelize');
class User extends Model{}
User.init({
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
nickname: { // 文章标题
type: Sequelize.STRING(128),
allowNull: false
},
password: {
type: Sequelize.STRING,
allowNull: false,
set(val) {
const salt = bcrypt.genSaltSyne(10)
const psw = bcrypt.hashSync(val, salt)
this.setDataValue('password', psw)
}
},
avatar: {
type: Sequelize.STRING(255),
allowNull: true,
},
email: {
type: Sequelize.STRING(128),
unique: true
},
introdue: { // 个人简介
type:Sequelize.STRING(255),
allowNull: true
}
}, {
sequelize,
tableName: 'user'
})
module.exports = { User }
</code></pre>
<p> </p>
<p>models/Post.js 文章模型</p>
<pre class="language-javascript"><code>const { Sequelize, Model } = require('sequelize');
const { sequelize } = require('../config/SqeDbConfig');
class Post extends Model{}
Post.init({
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
title: { // 文章标题
type: Sequelize.STRING,
allowNull: false
},
description: { // 文件简介
type:Sequelize.STRING(255),
allowNull: true
},
content: { // 文章内容
type: Sequelize.STRING(255),
allowNull: true
}
}, {
sequelize,
tableName: 'post'
})
module.exports = { Post }
</code></pre>
<p> </p>
<p>models/index.js 这里将models文件夹下的除了index.js以外所有的js,引入;</p>
<pre class="language-javascript"><code>'use strict'
const _ = require('lodash');
const fs = require('fs');
const path = require('path');
var db = {};
fs.readdirSync(__dirname)
.filter((file) => {
return (file.indexOf('.') !== 0) && (file !== 'index.js');
})
.forEach((file) => {
var model = require(path.join(__dirname, file));
db[_.upperFirst(model.name)] = model;
});
module.exports = db;
</code></pre>
<p> </p>
<p>app.js</p>
<pre class="language-javascript"><code>// 自动创建模型
require('./models/index');</code></pre>
<p>以下运行截图</p>
<p> </p>
<p><img src="https://www.bzsdn.com/api/20220713/5304b14e-9890-4f46-8e7e-9e9cf3aa598b.png" alt="" width="1129" height="268" /></p>
<p>这样,node配置sequelize,自动创建数据库表成功了。 </p>
<p> </p>
<p> </p>
分享到:
转载:
喜欢 2
收藏
上一篇:
苹果与前首席设计师乔纳森・艾维结束合作
暂无评论信息
- 相关文章
- 文章推荐
-
淘宝 NPM 镜像站喊你切换新域名啦
淘宝 NPM 镜像站(npm.taobao.org)自 2014 年 正式对外服务,一开始只是想简单地做 NPM 的中国镜像站点,回馈国内前端社区,不知不觉竟然一直运行到现在。当年参考 Ruby Gems 淘宝镜像 的方式,跟阿里开源组织申请了 taobao.org 的二级域名,镜像站点名称也自然而然地取名为 淘宝 NPM 镜像站 (下称 CNPM)。
-
娱美德旗下MMORPG手游《传奇4》将推出新PVP玩法"比奇掠夺"&
《传奇4》推出新门派PVP玩法!韩国首尔2022年6月29日 /美通社/ -- 《传奇4》(MIR4)的新PVP玩法比奇掠夺(Bicheon Heist)于2022年6月28日推出。
-
眼镜试戴的装饰效果
开发眼镜类产品的时候需要使用试戴的功能,这里就有你需要的学习资料哦!
-
亚马逊推出“无需收银员”的新技术,以此帮助品牌和广告商提高销量
北京时间 6 月 30 日早间消息,据报道,亚马逊发明了一种无需收银员的技术,可以加快人们去杂货店或便利店的速度。现在,该公司希望利用这个跟踪系统来帮助品牌和广告商提高销量。&
- 点击排行
- 站长推荐
- 猜你喜欢
- 网站信息
- 站内问答:12篇
- 站内文章:207篇
- 建站时间:已运行914天
- 备案号: 浙ICP备2022018799号
- 语言:
English(USA)
French(FR)
Chinese(ZH)
无数据