NodeJS开发博客(三) 数据的保存
什么是cookie
存储在浏览器的一段字符串(最大5k)
跨域不共享
格式如 k1=v1 k2=v2 因此可以存储结构化数据
每次发送http请求,会将请求域的cookie一起发送给server
server 可以修改 cookie 并返回给浏览器
浏览器也可以通过 JS 修改 cookie (有限制)
参考 lesson5;
---
session方法
首先解释何为 seesion【注意和 sessionStorage做区别】
首先,我大致的知道,session是一次浏览器和服务器的交互的会话,会话是啥呢?就是我问候你好吗?你回恩很好。就是一次会话,那么对话完成后,这次会话就结束了,还有我也知道,我们可以将一个变量存入全部的$_SESSION['name']中,这样php的各个页面和逻辑都能访问到,所以很轻松的用来判断是否登陆。



安装 redis

mac:访问 https://brew.sh/index_zh-cn ,执行
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
就能安装上 brew
执行 redis-server
然后新打开终端执行 redis-cli
最基本的命令:
set myname lihua
get myname
keys * //可以看到当前所有的key
del myname //删除key
目的: nodejs 连接 redis 的demo; 封装成工具函数,可以供 API 使用
首先启动 redis: redis-server 端口是 6379
新建一个项目,npm init
然后 安装redis: npm i redis --save
新建index文件:
const redis = require('redis')
//创建客户端
const client = redis.createClient(6379,'127.0.0.1');
client.on('error',err=>{
console.error(err)
})
//redis.print 会在执行完命令后打印出是否正确
client.set('myname','zhangsan2',redis.print)
client.get('myname',(err,val)=>{
if(err){
console.log(err);
return;
}
console.log('val:',val);
client.quit()
})
执行 node index.js
然后可以启动 redis-cli 查看 get myname
============================
接下来开始操作原来的博客项目,首先安装 redis: npm i redis -save
详见代码。
===========================
和前端联调

首先npm install http-server -g
http-server -p 8001 //设置端口
===================
nginx介绍:




以上是mac命令,对于windos如下:

1 首先修改配置文件 sudo vi /usr/local/etc/nginx/nginx.conf
1) 修改 端口为 8080
server{
listen 8080;
server_name localhost
}
2)
location / {
proxy_pass http://localhost:8001;
}
location /api/ {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
}
最后执行 wq 保存退出
然后启动 nginx
访问http://localhost:8080/ 就可以访问到 localhost:8001 的html
访问的接口api 就访问到了 localhost:8000的api
【所以要同时启动 服务端8000;客户端8001;nginx的服务;redis的服务】【没有启动8080的,但是通过nginx,可以通过8080访问其他端口】
[注意:如果接口访问不到 请注意排查一下是不是接口写的是post,而你用的是get请求]
=========
最后 一些小修改:
admin.html 中,由于只能访问自己的页面:
let author = req.query.author || '';
let keyword = req.query.keyword || '';
//新增admin部分
if(req.query.isadmin){
const loginCheckResult = loginCheck(req);
if(loginCheckResult){
//未登陆
return loginCheckResult
}
// 强制查询自己的博客,也就是说有这个参数的时候,不在使用url上给到的usernam
// 而是使用当前登陆信息中的 username
author = req.session.username
}
//app.js中的session和cookie和redis的配置
const session = require('koa-generic-session');
const redisStore = require('koa-redis');
const { REDIS_CONF } =require('./conf/db'); app.keys=['keys'];
app.use(session({
cookie:{
httpOnly:true,
path:'/',
maxAge:24*60*60*1000
},
store:redisStore({
all:`${REDIS_CONF.host}:${REDIS_CONF.port}`
})
})) //给session赋值的时候,会触发 生成cookie
ctx.session.username = ctx.request.body.username;
cookie-->session-->redis
浏览器和服务器通过cookieid获取到session
保存的session通过app中的配置,会把session保存到redis中,同时会生成一个cookieid;
通过cookied可以获取到所有的session信息
NodeJS开发博客(三) 数据的保存的更多相关文章
- 基于 abp vNext 和 .NET Core 开发博客项目 - 数据访问和代码优先
上一篇文章(https://www.cnblogs.com/meowv/p/12909558.html)完善了项目中的代码,接入了Swagger.本篇主要使用Entity Framework Core ...
- NodeJS开发博客(一)
1 区分 ECMAScript/JS/NodeJs --ECMAScript.定义了语法,写JS和NodeJS都要遵守: 变量定义,循环/判断/函数: 原型和原形链/作用域和闭包/异步 不能操作DOM ...
- NodeJS开发博客(二) 接入数据库
1. mysql 数据库下载网址:https://dev.mysql.com/downloads/mysql/ 账号是 root 密码是 a1************ 网站账号是邮箱,密码是 Aa1* ...
- NodeJS 开发博客(五) 使用express脚手架
1 安装脚手架 npm i express-generator -g 2 使用 express 命令 生成 项目 express-test express express-test 3. npm ...
- NodeJS 开发博客(四) 日志及安全攻击
node 操作文件: const fs = require('fs'); const path = require('path'); const filename = path.resolve(__d ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(三)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(六)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(八)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
随机推荐
- R画柱形图和箱线图
数据格式如下 gene_id Sham-1 Sham-2 Sham-3 Sham-4 Sham-5 Rep-1h-1 Rep-1h-2 Rep-1h-3 Rep-1h-4 Rep-1h-5 Rep-3 ...
- LeetCode 941. 有效的山脉数组(Valid Mountain Array)
941. 有效的山脉数组 941. Valid Mountain Array 题目描述 给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false. 让我们回顾一下,如果 A ...
- Struts笔记3
struts标签 form表单标签 Action:请求地址.直接写动作名称,不用写contextPath <s:form action="/user/register.action&q ...
- python爬取盘搜的有效链接
因为盘搜搜索出来的链接有很多已经失效了,影响找数据的效率,因此想到了用爬虫来过滤出有效的链接,顺便练练手~ 这是本次爬取的目标网址http://www.pansou.com,首先先搜索个python, ...
- PAT甲级满分有感
时间轴: 2017年,数据结构加入了我的课程清单. 2018年12月,我从网易云课堂下载了数据结构的所有课程视频(学校里没有网,只能离线看),开始一刷.一刷只看了视频,基本没有做题,看到AVL树的时候 ...
- jmu-Java-02基本语法-04-动态数组
题目: 根据输入的n,打印n行乘法口诀表.需要使用二维字符串数组存储乘法口诀表的每一项,比如存放1*1=1.为了保证程序中使用了二维数组,需在打印完乘法口诀表后使用Arrays.deepToStrin ...
- Git和Github的介绍、简单操作、冲突(上)
目的: 1.git与github简介 2.Git与SVN区别 3.Github 的简单使用 4.下载安装Git-20-64-bit.exe 5.Git常用命令 5.1Git命令使用场景 5. ...
- 邮件标准协议:MIME(Multipurpose Internet Mail Extensions)
MIME(多用途互联网邮件扩展)指的是一系列电子邮件技术规范 ,主要包括 RFC 2045~2049 传统的电子邮件只能使用 ASCII 字符,导致非英文字符都不能在电子邮件中使用 而且电子邮件中 ...
- Codeforces Round #421 (Div. 1) (BC)
1. 819B Mister B and PR Shifts 大意: 给定排列$p$, 定义排列$p$的特征值为$\sum |p_i-i|$, 可以循环右移任意位, 求最小特征值和对应移动次数. 右移 ...
- 微信开发者工具 关于no such file or directory
在新建页面中,保存后弹出 “ no such file or directory ” 错误 原因是打开了一个文件,然后在目录树中删除了它,但是这个被删除的页面依旧在打开状态,开发者工具在编译保存时由于 ...