nodejs:node是让js代码可以运行在操作系统上或者服务器上面的运行环境,拥有了操作系统级别的api,同时也继承了js本身的特性,事件驱动、闭包等
第3章 nodejs 介绍
debuger之inspect协议
- packages.json的命令行中增加
--inspect=9229 - 代码逻辑中写入debugger
- 网页打开chrome://inspect
- 前端网页通过路由的方式,触发debugger
第5章 开发博客项目之接口
tip1: 模块化规范
NodeJs默认用CommonJs规范来解析.js文件,用ES Modules来解析.mjs文件,如果我们将index.mjs强行改成index.js,那么在用node index.js来执行文件时,就会因为代码内容不符合相应的语法规范而报错; package.json中增加"type": "module",这样就可以用node来执行用ES Module规范来写的.js文件
tip2: 文件引入
app.js,js后缀不能省略,如何配置
import {serverHandle} from '../app.js'
tip3:回调地狱&promise (开发路由(博客详情路由)(下))
第6章 开发博客项目之数据存储
mysql:用docker安装 客户端:dbeaver
- sql注释用
-- - password是关键字,所以用``(insert的时候需要,select的时候不需要)
use myblog;
-- show tables;
-- insert into users(username,`password`,realname)values('lisi','123','李四');
-- select * from users;
-- select id,username from users;
-- select * from users where username='zhangsan'or`password`='123'
-- 模糊查询
select * from users where username like '%zhang%'
我这里用Docker拉取mysql的镜像,然后创建了容器;数据库的客户端使用的dbeaver,本地node连接的时候,主要是两个问题
- mysql 8的加密方式引起报错
- docker 需要登录容器内部,进行授权
## 进入容器内,登录mysql
mysql -u root -p
## 创建用户
## host一定要是'%'
## mysql_native_password 一定要用这个加密方式
mysql> CREATE USER 'xcy'@'%' IDENTIFIED WITH mysql_native_password BY 'xxxx';
## 授权
mysql> GRANT ALL PRIVILEGES ON *.* TO 'xcy'@'%' WITH GRANT OPTION;
## 刷新
mysql> FLUSH PRIVILEGES;
**
另外,因为使用的dbeaver,所以还会遇到Public Key Retrieval is not allowed报错
参考:
第7章 博客项目之登录
一. 客户端JavaScript操作cookie
1. 客户端查看cookie三种方式
- 请求头中有cookie 响应头中有set-cookie
- chrome/application/cookie
- 控制台document.cookie
2. js查看、修改cookie(有限制)
- 控制台 document.cookie = 'k1=100'(会被累加)
二. server端nodejs操作cookie
加了httpOnly后,该cookie无法通过
document.cookie查看和修改
document.cookie="name=1121"会修改cookie中name的值,但是document.cookie="username=111"就不会修改cookie中username的值
三. session
cookie中存放username很危险,所以cookie中存放userid,server端获取userid去对应用户的信息,这种方案叫做session
四. redis
session保存在内存的进程中,线上多进程的情况,无法共享,且大小受限,所以存在redis中
目前工作中,nodejs主要做bfe层,不与数据库直接操作,所以这里了解一下就好,以后有需要的时候再看一下
五. 跨域
方法一. nginx做转发
方法二. 前端配置代理(本地开发)
方法三. CORS
- 需要注意,server需要对opitons请求处理返回,否则post预检请求会报错404
- HTTP之options预检请求
server:
// cors
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:5173');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
res.setHeader('Access-Control-Allow-Credentials', true);
fe:
axios.post('http://localhost:8000/api/user/login', {
username: 'lisi',
password: '123',
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
第8章 博客项目之日志
后续补充
第9章 博客项目之安全
后续补充
第10章 使用 express 重构博客项目
res.json({
error: 0,
data: {
"id": 2,
"name": "test---2",
}
})
相当于原生的
res.end(JSON.stringify())
res.setHeader('Content-Type', 'application/json')
第11章 使用 Koa2 重构博客项目
## 安装koa2
$ npm install koa-generator -g
$ Koa2 koa2-test
$ npm i & npm run dev
洋葱圈模型
先红色,后黄色
第14章 线上环境和 PM2 配置
单个进程的内存是有限的,使用多个进程的时候,session存放在内存中是不能共享的,所以需要把session存放在redis中
第15章 发布到云服务器
其他:
- cross-env
4. application/json和text/html区别
- res.end和res.write区别
// res.writeHead(404, { 'Content-Type': 'text/plain' })
// res.write('404 Not Found\n')
res.end('404 Not Found\n')
- super