【Nodejs博客项目开发】之原生nodejs实现博客系统(五)
【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实现博客系统(五)相关推荐
- 【Nodejs博客项目开发】之原生nodejs实现博客系统(一)
[Nodejs博客项目开发]之原生nodejs实现博客系统(一) >>目录 [Nodejs博客项目开发]之原生nodejs实现博客系统(一) 一.接口设计 二.基本目录结构 三.`www. ...
- JavaWeb个人博客项目:手把手教你实现博客后台系统之具体准备与分析3
其实早就有写完这个个人博客后台的想法,奈何我每次保存这篇博文的时候网络都出问题,写了半天毁于一旦,我的心情也是崩溃的TAT 但是不写完吧,我总觉得有件事没做完,做其他事也没有劲头,久而久之我都不怎么敲 ...
- 简单个人博客系统java web_JavaWeb个人博客项目:手把手教你实现博客后台系统之登录与注册...
JavaWeb个人博客项目:手把手教你实现博客后台系统之登录与注册 发布时间:2020-07-17 17:10阅读:( )字号: 大 中 小 后台系统的所有界面图以及之前的准备工作欢迎看我之前的博文& ...
- 外包项目开发课程整理一:SDLC传统系统开发生命周期7个阶段
外包项目开发课程整理一:SDLC传统系统开发生命周期7个阶段 前言: 课程全称为:通过案例学习外包项目开发,是软件工程专业大三下的课程,我将根据中方外方ppt教授讲述内容及上网搜索的知识对本课程进行系 ...
- 个人博客项目开发总结(一) 项目架构及后端开发
一.项目架构 1.技术栈介绍 (1)后端 SpringBoot2:后端服务开发框架 MyBatis:数据库交互与管理 Redis:数据缓存 Shiro:身份与权限管理 JWT:前后端分离令牌 Quar ...
- 极客 项目_您的宠物的极客动手项目
极客 项目 Whether it's your cat, dog, ferret, guinea pig, or rabbit, your pet is as much a part of your ...
- Nodejs+Vue wzry项目 开发记录
收获 <el-menu > 这里不加router ,index无法跳转 ${}这种字符串很香,不再用++拼接了(好无语明明学过,却忘记用-) 修改页面和新增页面可以用一个组件,一些选择显示 ...
- JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5
上一篇博文介绍了注册和登录模块,未看过的人欢迎翻我之前博文~ 接下来就进入登录成功后的主界面,这里主要实现主界面的基础布局和管理员管理模块=w= GitHub地址:https://github.com ...
- JavaWeb个人博客项目:手把手教你实现博客后台系统之界面图展示1
这几天期末答辩,老师要求做一个JavaWeb项目.由于我是一个人,思来想去之后,我就去做了个人博客系统.包含前台系统和后台系统. 这里我就主要记录一下我是如何一个星期做完我的后台系统的,前台等以后有空 ...
最新文章
- 2022-2028年中国完全生物降解塑料产业发展动态及投资前景预测报告
- linux代码签名,浅谈Linux容器和镜像签名(示例代码)
- 从Grid R-CNN到Grid R-CNN Plus:基于网格的目标检测演化
- java安卓获取mac_android开发分享以编程方式获取Android设备的MAC
- 最大似然估计_状态估计的基本概念(2)最大似然估计和最大后验估计
- Excel导入MS SQL SERVER 操作
- JavaScript学习笔记之BOM篇,认识几种常见的浏览器对象
- mysql客户端工具_性能优化-理解 MySQL 体系结构(MySQL分库分表)
- Javascript作用域、闭包原理以及性能问题
- 鲜为人知的软件项目管理原则
- 【Java 学习笔记】《Head First Java》——基本概念
- API在公司全业务快速使用给信息安全带来了巨大挑战
- windows11的ps界面字体显示过小
- 微信小程序之店铺评分组件及vue中用svg实现的评分显示组件
- excel打开html非常慢,excel打开速度很慢的解决方法
- 眼睛有血斑,就是眼底出血?
- 《AngularJS深度剖析与最佳实践》一1.3 创建项目
- 逆光人物摄影构图灵感经验分享,在集设网参与设计大咖的成长之路!
- 计算机定时开机关机设置,电脑定时开关机,小编教你怎么设置电脑定时开关机...
- HBase基础【HBase简介、HBase安装、HBase shell操作】
热门文章
- 转 关于Hive中的复杂数据类型Array,Map,Structs的一些使用案例
- springBoot+actuator 实现优雅的停止服务器
- 【UE4】指数密度高度雾
- mysql微信昵称特殊符号_MySQL保存微信昵称中的特殊符号造成:(Incorrect string value: xxxx'for column ‘name’ at row 1)异常...
- xcrun simctl
- TwinCAT NC轴控制第三方伺服报错4655原因
- 费尔顿被讽联盟最差 某高管:大学生都比他强
- 李进祥发现并挖掘了“清水河”文学地理
- 南中高速公路智慧梁场解决方案
- ReSharper智能插件,ReSharper分析代码质量