nodejs笔记
创建koa项目
// 设置环境变量的工具
npm i cross-env -D
// package.json
"scripts": {
"start": "node bin/www",
"dev": "cross-env NODE_ENV=dev ./node_modules/.bin/nodemon bin/www",
"prd": "cross-env NODE_ENV=production pm2 start bin/www",
"test": "echo \"Error: no test specified\" && exit 1"
},
ejs的使用
- 变量
- 判断和循环
- 引用组件
mysql的基础使用
增删改查
use koa_weibo;
-- 倒序查找
-- select * from blogs order by id desc
-- select username,password from users where username='zhangsan' and `password` ='123';
-- insert into blogs (title, content, userid) values('红十字会', '希望公开透明', 2);
-- update blogs set content = '加油,中国' where id ='1';
delete from blogs where id= 2;
-- 查询总数
select count (id) as `count` from blogs
-- 查询页数
-- 限制1行 跳过一行
select * from users order by id limit 1 offset 1;
外键
连表查询和外键不是必须一定要有的,但是外键可以让数据同步实施更新
-
如何创建外键?
Navicat创建外键 方式
-
更新限制 & 删除级联
创建外键后设置好更新和删除的操作即可实现
-
连表查询
查询到不同表之间相互关联的数据
select * from blogs inner join users on users.id = blogs.userid; // select blogs.*, users.username, users.nickname from blogs inner join users on users.id = blogs.userid; // select blogs.*, users.username, users.nickname from blogs inner join users on users.id = blogs.userid where users.username = 'zhangsan';
sequelize
增
const { Blog, User } = require('./model');
!(async function() {
const zhangsan = await User.create({
userName: 'zhangsan',
password: ' 123456',
nickName: '张三'
});
console.log(zhangsan.dataValues);
const blogs = await Blog.create({
title: '标题1',
content: ' 内容1',
userId: 1
});
console.log(blogs.dataValues);
})();
// 分页
const blogListAndCount = await Blog.findAndCountAll({
limit: 2,
offset: 0,
order: [
['id', 'desc']
]
});
console.log(
blogListAndCount.count,
blogListAndCount.rows.map(blog =>
blog.dataValues
));
连表查询
// 创建外键关联
Blog.belongsTo(User, {
// 创建外键关联
// Blogs.userId ->Users.id
// 默认情况就是关联id
foreignKey: 'userId'
});
// 和上面的效果等同
User.hasMany(Blog, {
foreignKey: 'userId'
});
第一个使用Blog.belongs(...) 和第二个的User.hasMany(...)外键效果相同,但是第一个可以通过blog的表查询联动查询到user中的,儿第二个可以实现反过来。
const blogListWithUser = await Blog.findAndCountAll({
order: [
['id', 'desc']
],
include: [
{
model: User,
attributes: ['userName', 'nickName'],
where: {
userName: 'zhangsan1'
}
}
]
});
console.log(blogListWithUser);
console.log(blogListWithUser.rows.map(blog => {
const blogVal = blog.dataValues;
blogVal.user = blogVal.user.dataValues;
return blogVal;
}));
const userListWithBlog = await User.findAndCountAll({
attributes: ['userName', 'nickName'],
include: [
{
model: Blog,
}
]
});
// output
console.log(userListWithBlog.count,
userListWithBlog.rows.map(user => {
const userVal = user.dataValues;
userVal.blogs = userVal.blogs.map(val => val.dataValues);
return userVal;
}
)
);
外键有一对多,和多对一的关系
更新数据
const { User } = require('./model');
!(async function() {
const updateRes = await User.update(
{
nickName: '李四222'
},
{
where: {
userName: 'zhangsan1'
}
}
);
console.log(updateRes);
})();
删除数据
const { User, Blog } = require('./model');
!(async function() {
const delBlogRes = await Blog.destroy({
where: {
id: 4
}
});
console.log(delBlogRes);
})();
连接池
const Sequelize = require('sequelize');
const conf = {
host: 'localhost',
dialect: 'mysql'
};
// 线上环境使用的连接池
// conf.pool = {
// // 连接池中的最大数量
// max: 5,
// min: 0,
// // 如果一个连接池10s之内没有被使用,
// idle: 10000
// };
const seq = new Sequelize('koa_weibo', 'root', '123456', conf);
module.exports = seq;
redis的使用
打开一个 cmd 窗口 使用 cd 命令切换目录到 C:\redis 运行:
redis-server.exe redis.windows.conf
reids-cli
cookie 和 session
将cookie和session保存到redis
安装依赖
yarn add koa-redis
// 生成session的工具
yarn add koa-generic-session
jest单元测试
(∩_∩)-----代码改变生活。