nodejs+Koa2实际项目中遇见的问题

2019-12-25  本文已影响0人  wayne1125
1、pm2配置文件——服务不定时挂掉

pm2配置

{
 "apps": [
  {
   "name": "management-server",
   "script": "bin/www",
   "log_date_format": "YYYY-MM-DD HH:mm:SS",
   "log_file": "logs/node.log",
   "error_file": "logs/node-err.log",
   "out_file": "logs/node-out.log",
   "pid_file": "pids/node.pid",
   "instances": 1,
   "min_uptime": "200s",
   "max_restarts": 30,
   "max_memory_restart": "10M",
   "cron_restart": "1 0 * * *",
   "watch": false,
   "merge_logs": true,
   "exec_interpreter": "node",
   "exec_mode": "cluster_mode",
   "autorestart": true,
   "vizion": false
  }
 ]
}

项目中pm2配置是从网上找的,搜的大部分都是以上这种,也看了各个字段大致意思,于是就把项目部署至服务器,然后每隔个几天服务就会不定时挂掉,为此运维也配合加了服务监控脚本,然而并没有用,这种状态持续了大概半个月,当时慌了一批,于是尝试了解具体每个配置项并在开发环境上配置观察
当试了"max_memory_restart": "10M", // 重启占用最大内存这个配置时把10M改成1024M,服务从此没在挂掉
参考文章:
https://blog.csdn.net/Baby_lucy/article/details/82216454
https://www.jianshu.com/p/e2a929ea8cfd

2、连接数据库配置
const Sequelize = require('sequelize')
let user = 'test_online'
let pwd = '@#$12wipo'
let host = '192.168.13.123'
const HealthyDB = new 
// 连接数据库简单写法
Sequelize(`mysql://${user}:${pwd}@${host}/test_management`, {
  host: '192.168.13.123',
  port: 3306,
  define: {
    timestamps: false // 取消Sequelize自动给数据表加入时间戳(createdAt 以及 updatedAt)
  },
  timezone: '+08:00' // Mysql时区与Node时区不一致问题
})
module.exports = {
  HealthyDB // 将HealthyDB暴露出接口,方便Model调用
}

以上写法在以ip为host的地址是可以的,但是在发布上线时就不适用了,原因是因为线上数据库用的是阿里云rds数据库,host是rm-bnsq123.mysql.rds.aliyuncs.com这种形式,不是上面那种ip地址形式,会报连接数据库失败,猜测原因可能是上面拼接形式解析时出的问题,各种搜索后找到了以下配置方式:

const Sequelize = require('sequelize')
let configInfo = database[process.env.NODE_ENV]

// // 预发环境
const config = {
  // 数据库
  database: 'test_management',
  // 用户名
  username: 'test_online',
  // 密码
  password: '@#$12wipo',
  // 使用哪个数据库程序
  dialect: 'mysql',
  // 地址
  host:'rm-bnsq123.mysql.rds.aliyuncs.com',
  // 端口
  port: 3306,
  // 连接池
  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  },
  define: {
    timestamps: false // 取消Sequelize自动给数据表加入时间戳(createdAt 以及 updatedAt)
  },
  timezone: '+08:00' // Mysql时区与Node时区不一致问题
}
console.log(config,'config')
const HealthyDB = new Sequelize(config)

module.exports = {
  HealthyDB // 将HealthyDB暴露出接口,方便Model调用
}

以上配置方式使用了host为ip和阿里云rds数据库形式的配置

3、解决Mysql时区 与 Node时区 不一致导致问题

这个问题主要是接口新增后的时间字段和mysql中对应不上,通过Sequelize中添加配置项解决,在2中的config中添加timezone: '+08:00' // Mysql时区与Node时区不一致问题
参考:
https://blog.csdn.net/u011249920/article/details/80941799
https://blog.csdn.net/chanlingmai5374/article/details/93190983

上一篇下一篇

猜你喜欢

热点阅读