node连接mysql,做后台管理

报错Error: connect ECONNREFUSED

  1. 查到有的说是端口号被占用,或是之前的服务没有关掉
  2. 要先去安装mysql呀 ,不是一句npm install mysql就完事了的;看菜鸟的教程吧;也是坑一开始都没有database(数据库),连接test的database 当然连接不上去
  3. 参考我之前的安装mysql
  4. 端口要用3306;我发现密码输入啥都可以连接上呀
  5. 连接阿里云的数据库,分区域,不同区域的服务器和数据库不能连接,外网也不能访问
  6. 要不自己去弄个数据库
  7. 我可以不用阿里云的数据库呀,直接在164上装mysql;可是164只有2g运行内存,还剩下100多m,很危险呀
  8. 增删查改可以照着菜鸟的教程试试
  9. 要完全按照项目的要求,如实现官网新闻的增删查改;不然只是觉得自己知道怎么操作了,但更重要的是如何设计表,数据分类的逻辑等
  10. 有没有什么库封装了mysql方便操作,以及异步的问题
    1. orm框架
    2. Sequelize 很多人推荐 14549颗星
    3. 为了解决问题而引入框架,但使用框架的初期,又是和原生双重的坑要克服
  11. 2018年6月20日 17:25:10
    1. 添加了删除和修改新闻的功能
    2. 把上传的图片移到web文件里面了,访问时通过端口8080
    3. 还需要研究下那个删除,貌似是软删除,还能检索出来,需要把之前的数据清空
    4. 还是不知道如何添加属性

Sequelize实践

报错:Dialect needs to be explicitly supplied as of v4.0.0
解决: dialect: 'mysql'|'sqlite'|'postgres'|'mssql', 这里要选一种 如dialect: 'mysql'


又需要下载mysql2
npm install --save mysql2


user 会默认 搜索users?
define: {
freezeTableName: true, //默认情况下,sequelize会把王model的名字根据table的名字设置成复数形式,如果你不想要这样的话,就要做这个配置
underscored: true //这样设置的话,那么在添加外键的时候,sequelize会自动把外键设置为tableName_key,默认的是tableNameKey,这种驼峰式的命名
}
来自 sequelize 笔记


对于属性字段 先全部type: Sequelize.STRING // VARCHAR(255) 优化以后再说

varchar(n) 表示n个字符,无论汉字和英文,MySql都能存入 n 个字符,仅实际字节长度有所区别。
来自 MySQL 数据库 varchar 到底可以存多少个汉字,多少个英文呢?我们来搞搞清楚


(async() => {
    await News.create({
        'title': '1111',
        'img': '/g/g/g',
        'time': '2018-05-19',
        'department': '商务部',
        'intro': '5月19日上午9点,南京工业大学青创校友联盟成立大会在南工大江浦会议室举行。校长乔旭教授致辞。乔校长简要介绍了学校。'
    })

    News.findAll()
        .then((news) => {
            res.send(news)
        })

})()


News.create({
        'title': '1111',
        'img': '/g/g/g',
        'time': '2018-05-19',
        'department': '商务部',
        'intro': '5月19日上午9点,南京工业大学青创校友联盟成立大会在南工大江浦校区行政楼104会议室举行。校长乔旭教授致辞。乔校长简要介。'
    })
    .then(() => {
        News.findAll()
            .then((news) => {
                res.send(news)
            })

    })


如何在表里面添加一条属性

// 移'firstName'属性
User.removeAttribute('firstName');

参考
sequelize 学习之路
官方github文档
廖雪峰的mysql教程
Node.JS使用Sequelize操作MySQL做了一定的封装,条理也很清晰,可以参考这个写
api文档


已经实现 页面添加新闻基础功能,
页面还需要上传图片、选择日期;还是要找个ui框架来做这个页面。layer?
以及修改和删除的功能,
先在我本机实现所有功能,之后再考虑放阿里数据库或是某个服务器


用layer完成一个添加新闻的页面
需要将数据按照时间排序,时间越新越在前面
需要一个列表展示已经上的新闻,能控制其显示隐藏


//数据按照时间排序,越近的在前面
news = news.sort(function(a, b){  
    return new Date(b.time) - new Date(a.time);  
}); 
res.send(news)

按日期排序JavaScript对象数组


用pm2 起了三个服务,一个node对mysql的操作,一个是访问静态资源的server.js,还一个就是本机mysql的服务


layer实践

layer官网文档
他那个完整的一套是要收费的 一年800吧
那就照着文档先做了两个单独的页面,通过iframe展示

使用
做表格的时候 自动填充,需要返回的数据结构中code为0,200都不行 不知道能不能设置 var $ = layui.jquery, layer = layui.layer; //独立版的layer无需执行这一句 //触发事件 var active = { test6: function() { layer.open({ type: 2, content: 'hd-demo.html', area: ['700px', '500px'], maxmin: true, cancel:function(){ console.log('关闭了') }, end:function(){ //iframe自己关闭的时候会触发 console.log('销毁了') } }); } } $('.demo').on('click', function() { var type = $(this).data('type'); active[type] ? active[type].call(this) : ''; }); 重载表格
table.reload('news'); //是lay-data里面的id js设置selecte的选中,要刷新select选择框渲染 $('.news-department option[value=' + newsData.department + ']')[0].selected = true form.render('select'); 添加表格上每条数据的操作 编辑删除等 是[toolbar - 绑定列工具条](http://www.layui.com/doc/modules/table.html#ontool) 果然作者已经想到了

连接阿里云的服务器
mysql -h rds1ae3ys910jplrzjbra.mysql.rds.aliyuncs.com -p 3306 -u app -p
提示Access denied for user 'app'@'%' to database '3306'
访问被拒绝

show databases; 查看所有的数据库

MySQL 远程登录阿里云RDS和常用命令


服务器安装mysql

在原来的基础上直接 yum install mysql-server
然后service mysqld start 就启动了

停止 service mysqld stop
创建root管理员:

mysqladmin -u root password 123456
登录:

mysql -u root -p输入密码即可。

就OK了

显示数据库中的数据表:show tables
建立数据库:create database 库名

每条语句后面记得加分号 ;再回车

参考:
linux下使用yum安装mysql,以及启动、登录和远程访问


远程连接mysql时,提示“is not allowed to connect to this MySQL server”的解决方法

反正都在一个服务器 可以先用localhost登录

【MySQL】mysql 远程访问不行解决方法 Host is not allowed to connect to this MySQL server


Duplicate entry '%-root' for key 'PRIMARY'

如果执行update语句时出现ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY' 错误,说明有多个ROOT用户纪录在USER表中了.

需要select host from user where user = 'root';

查看一下host是否已经有了%这个值,有了就可以了.

mysql> select host,user from user where user='root';

MYSQL设置远程账户登陆总结

Mysql 常用基本命令总结


返回的中文乱码

看到这篇文章
彻底解决mysql中文乱码;前面照着做,后面才说上面的办法治标不治本,蛋疼,还是要看完再操作,把my.cnf文件拿出来修改后,再重启mysql,登录就报错Access denied for user 'root'@'localhost' (using password: YES)';解决上面问题需要
在my.cnf文件的[mysqld]下添加
skip-grant-tables;一开始不行 后来把my.cnf文件换了行之后就行了

/etc/my.cnf

[mysqld]
character-set-server=utf8

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0


skip-grant-tables
[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

这次是从乱码变成了问号,再命令行里面看也全是问号。。。 那这就应该是其他的问题了,果然在sequelize的配置define: {
charset: 'utf8',... 就好了;
至此,线上的mysql也完成了

你可能感兴趣的:(node连接mysql,做后台管理)