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

作者:神秘网友 发布时间:2020-10-27 06:42:18

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

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

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

首先下载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'
    }

    //redis
    REDIS_CONF = {
        port: 6379,
        host: '127.0.0.1'
    }
}

// 线上的(现在只不过是没有具体区别线上线下)
if (env === 'production') {
    MYSQL_CONF = {
        host: 'localhost',
        user: 'root',
        password: 'qybsjct',
        port: '3306',
        database: 'myblog'
    }

    //redis
    REDIS_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.username
        const 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.username
        const 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文件夹下

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

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

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

注意:开启mysql

1、介绍

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

反向代理

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

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;
		}

前端

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

后端

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

nginx代理后

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

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

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

  1. nodejs 根据坐标 标记图片上的姓名列

    nodejs 根据坐标 标记图片上的姓名列 npm install canvas或者使用cnpm install canvas var { createCanvas, loadImage } = require('canvas');function drawImageRemark(imgurl,rects,res) { loadImage(imgurl).then((image) = { console.log(image.width) co

  2. QT项目开发:标准文件框类、标准颜色框类、标准字体框类

    QT项目开发:标准文件框类、标准颜色框类、标准字体框类 1.创建Dialog 2.选择QDialog,并取消创建界面 Dialog.h #ifndef DIALOG_H#define DIALOG_H#include QDialog#includeQGridLayout#includeQFileDialog#includeQPushButton#includeQLineEditclass Dialog

  3. 一篇博客搞定Django基础

    一篇博客搞定Django基础 web框架本质 1.TCP/UDP协议 TCP :一种面向连接的、可靠的、传输层通信协议(比如:打电话);优点:可靠,稳定,传输完整稳定,不限制数据大小;缺点:慢,效率低,占用系统资源高, 一发一收都需要对方确认 应用:Web浏览器,电子邮件,文件传输

  4. 使用Hugo+Gitbook+Nginx 构建静态博客网站

    使用Hugo+Gitbook+Nginx 构建静态博客网站 前言:之前我一直使用的是wordpress搭建的博客,由于是在某云搞活动时买的最低配置服务器,而wordpress又需要安装很多组件,网站变得越来越慢。最近发现了Hugo 是 Go 编写的静态网站生成器,速度很快,依赖于 Markdo

  5. 技术博客,从零到数万访问,这两年我都做了什么

    技术博客,从零到数万访问,这两年我都做了什么 作为一名有追求的程序猿,我是不会满足于每天重复性的搬砖和写bug的。为了能够让自己显得更有价值,我决定去做一件非常有意义的事情,那就是写技术博客。因为我觉得分享才是我们程序猿最高尚的品格,因为在我刚

  6. 个人博客如何选择图床

    个人博客如何选择图床 自2020年8月9日jsdelivr发表了“新规则”后,便引起QQ群、v2ex、知乎等各大平台的议论。小康 新规则中有一条是这样说的: running an image hosting website and using jsDelivr as a storage for all uploaded images 大概意思就是不允

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

    【Nodejs博客项目开发】之原生nodejs实现博客系统(四) 【Nodejs博客项目开发】之原生nodejs实现博客系统(四) 1、cookie 存储在浏览器的一段字符串(最大5kb) 跨域不共享 格式:k1=v1;k2=v2可以存储结构化数据 每次发送HTTP,会将请求域的cookie一起发给server

  8. 博客园样式美化(兼容为知笔记)

    博客园样式美化(兼容为知笔记) 文章目录 博客园样式美化(兼容为知笔记) 样式优化 准备 上传文件 css样式 博客侧边栏公告(支持HTML代码) (支持 JS 代码) 页首 HTML 代码 页脚 HTML 代码 博客园样式美化(兼容为知笔记) 参考: https://www.cnblogs.com/yjlau