【Nodejs博客项目开发】之原生nodejs实现博客系统(五)

一、session存入redis

首先下载redis模块:npm i redis --save

db.js

配置redis

const env = process.env.NODE_ENV //环境参数// 配置
let MYSQL_CONF
let REDIS_CONF
// 开发环境下的
if (env === 'dev') {MYSQL_CONF = {host: 'localhost',user: 'root',password: 'qybsjct',port: '3306',database: 'myblog'}//redisREDIS_CONF = {port: 6379,host: '127.0.0.1'}
}// 线上的(现在只不过是没有具体区别线上线下)
if (env === 'production') {MYSQL_CONF = {host: 'localhost',user: 'root',password: 'qybsjct',port: '3306',database: 'myblog'}//redisREDIS_CONF = {port: 6379,host: '127.0.0.1'}
}module.exports = {MYSQL_CONF,REDIS_CONF
}

db/rdis.js

在db文件夹下创建redis.js

const redis = require('redis')
const { REDIS_CONF } = require('../conf/db')// 创建客户端
const redisClient = redis.createClient(REDIS_CONF.port, REDIS_CONF.host)
redisClient.on('error', err => {console.log(err)
})function set(key, val) {if (typeof val === 'object') {// 变成字符串val = JSON.stringify(val)}redisClient.set(key,val,redis.print)
}function get(key) {const promise = new Promise((resolve, reject) => {redisClient.get(key, (err, val) => {if (err) {reject(err)return}if (val == null) {resolve(null)return}try {resolve(// 转换为对象JSON.parse(val))} catch(ex) {resolve(val)}})})
}module.exports = {set,get
}

二、设置统一登录验证功能

1、router/blog.js

//统一的登录验证函数
const loginCheck = (req) => {if (!req.session.username) {return Promise.resolve(new ErrorModel('尚未登录'))}
}

需要在新建博客接口、更新博客接口、删除博客接口中判断用户有没有登录,并且把author假数据改为真数据

    // 新建一篇博客if (method === 'POST' && req.path === '/api/blog/new') {// const data = newBlog(req.body)// return new SuccessModel(data)const loginCheckResult = loginCheck(req)if (loginCheckResult) {//未登录return loginCheck}req.body.author = req.session.usernameconst result = newBlog(req.body)return result.then(data => {return new SuccessModel(data)})}// 更新博客接口if (method === 'POST' && req.path === '/api/blog/update') {const loginCheckResult = loginCheck(req)if (loginCheckResult) {//未登录return loginCheck}const result = updateBlog(id, req.body)return result.then(val => {if (val) {return new SuccessModel()} else {return new ErrorModel('更新博客失败')}})}// 删除一篇博客接口if (method === 'POST' && req.path === '/api/blog/del') {const loginCheckResult = loginCheck(req)if (loginCheckResult) {//未登录return loginCheck}   const author = req.session.usernameconst result = delBlog(id, author)return result.then(val => {if (val) {return new SuccessModel()} else {return new ErrorModel('删除博客失败')}

2、router/user.js

把登录请求GET方式改为POST

if (method === 'POST' && req.path === '/api/user/login') {const {username, password} = req.body
}

三、前端联调

登录功能依赖cookie ,必须用浏览器来联调
cookie跨域不共享的,前端和server端必须同域
需要用到nignx做代理,让前后端端同域

开发前端页面:

在html-test文件夹下

全局安装http服务:npm i http-server -g

设置端口并启动:http-server -p 8001

注意:开启mysql

四、Nginx

1、介绍

高性能的web服务器,开源免费

反向代理

2、Nginx使用

Nginx配置:Windows : C:\nginx\conf\nginx.conf

nginx命令:nginx -t

启动nginx

重启nginx -s reload

停止nginx -s stop

3、配置nginx

打开nginx.conf文件

worker_processes  1;#修改端口:
listen       8080;#将如下代码注释
#location / {
#  root   html;
#   index  index.html index.htm;
#}#配置代理
location / {proxy_pass http://localhost:8001;}location /api/ {proxy_pass http://localhost:8000;proxy_set_header Host $host;}

五、通过nginx代理来实现解决跨域问题

前端

后端

nginx代理后

六、总结

nginx方向代理的配置
//localhost:8000;proxy_set_header Host $host;
}

【Nodejs博客项目开发】之原生nodejs实现博客系统(五)相关推荐

  1. 【Nodejs博客项目开发】之原生nodejs实现博客系统(一)

    [Nodejs博客项目开发]之原生nodejs实现博客系统(一) >>目录 [Nodejs博客项目开发]之原生nodejs实现博客系统(一) 一.接口设计 二.基本目录结构 三.`www. ...

  2. JavaWeb个人博客项目:手把手教你实现博客后台系统之具体准备与分析3

    其实早就有写完这个个人博客后台的想法,奈何我每次保存这篇博文的时候网络都出问题,写了半天毁于一旦,我的心情也是崩溃的TAT 但是不写完吧,我总觉得有件事没做完,做其他事也没有劲头,久而久之我都不怎么敲 ...

  3. 简单个人博客系统java web_JavaWeb个人博客项目:手把手教你实现博客后台系统之登录与注册...

    JavaWeb个人博客项目:手把手教你实现博客后台系统之登录与注册 发布时间:2020-07-17 17:10阅读:( )字号: 大 中 小 后台系统的所有界面图以及之前的准备工作欢迎看我之前的博文& ...

  4. 外包项目开发课程整理一:SDLC传统系统开发生命周期7个阶段

    外包项目开发课程整理一:SDLC传统系统开发生命周期7个阶段 前言: 课程全称为:通过案例学习外包项目开发,是软件工程专业大三下的课程,我将根据中方外方ppt教授讲述内容及上网搜索的知识对本课程进行系 ...

  5. 个人博客项目开发总结(一) 项目架构及后端开发

    一.项目架构 1.技术栈介绍 (1)后端 SpringBoot2:后端服务开发框架 MyBatis:数据库交互与管理 Redis:数据缓存 Shiro:身份与权限管理 JWT:前后端分离令牌 Quar ...

  6. 极客 项目_您的宠物的极客动手项目

    极客 项目 Whether it's your cat, dog, ferret, guinea pig, or rabbit, your pet is as much a part of your ...

  7. Nodejs+Vue wzry项目 开发记录

    收获 <el-menu > 这里不加router ,index无法跳转 ${}这种字符串很香,不再用++拼接了(好无语明明学过,却忘记用-) 修改页面和新增页面可以用一个组件,一些选择显示 ...

  8. JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5

    上一篇博文介绍了注册和登录模块,未看过的人欢迎翻我之前博文~ 接下来就进入登录成功后的主界面,这里主要实现主界面的基础布局和管理员管理模块=w= GitHub地址:https://github.com ...

  9. JavaWeb个人博客项目:手把手教你实现博客后台系统之界面图展示1

    这几天期末答辩,老师要求做一个JavaWeb项目.由于我是一个人,思来想去之后,我就去做了个人博客系统.包含前台系统和后台系统. 这里我就主要记录一下我是如何一个星期做完我的后台系统的,前台等以后有空 ...

最新文章

  1. 2022-2028年中国完全生物降解塑料产业发展动态及投资前景预测报告
  2. linux代码签名,浅谈Linux容器和镜像签名(示例代码)
  3. 从Grid R-CNN到Grid R-CNN Plus:基于网格的目标检测演化
  4. java安卓获取mac_android开发分享以编程方式获取Android设备的MAC
  5. 最大似然估计_状态估计的基本概念(2)最大似然估计和最大后验估计
  6. Excel导入MS SQL SERVER 操作
  7. JavaScript学习笔记之BOM篇,认识几种常见的浏览器对象
  8. mysql客户端工具_性能优化-理解 MySQL 体系结构(MySQL分库分表)
  9. Javascript作用域、闭包原理以及性能问题
  10. 鲜为人知的软件项目管理原则
  11. 【Java 学习笔记】《Head First Java》——基本概念
  12. API在公司全业务快速使用给信息安全带来了巨大挑战
  13. windows11的ps界面字体显示过小
  14. 微信小程序之店铺评分组件及vue中用svg实现的评分显示组件
  15. excel打开html非常慢,excel打开速度很慢的解决方法
  16. 眼睛有血斑,就是眼底出血?
  17. 《AngularJS深度剖析与最佳实践》一1.3 创建项目
  18. 逆光人物摄影构图灵感经验分享,在集设网参与设计大咖的成长之路!
  19. 计算机定时开机关机设置,电脑定时开关机,小编教你怎么设置电脑定时开关机...
  20. HBase基础【HBase简介、HBase安装、HBase shell操作】

热门文章

  1. 转 关于Hive中的复杂数据类型Array,Map,Structs的一些使用案例
  2. springBoot+actuator 实现优雅的停止服务器
  3. 【UE4】指数密度高度雾
  4. mysql微信昵称特殊符号_MySQL保存微信昵称中的特殊符号造成:(Incorrect string value: xxxx'for column ‘name’ at row 1)异常...
  5. xcrun simctl
  6. TwinCAT NC轴控制第三方伺服报错4655原因
  7. 费尔顿被讽联盟最差 某高管:大学生都比他强
  8. 李进祥发现并挖掘了“清水河”文学地理
  9. 南中高速公路智慧梁场解决方案
  10. ReSharper智能插件,ReSharper分析代码质量