Node.js开发Web Server博客项目复盘

本文介绍了一个基于Node.js和MySQL的前后端分离项目的搭建过程,包括前端页面运行配置、后端接口开发、登录验证及使用session和redis进行状态管理的方法,并通过nginx反向代理解决跨域问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目地址

项目我放在github上辣:github链接

整体框架

在这里插入图片描述

  1. 前端页面比较简单,通过http-server运行在8001端口,以方便实现前后端的联调
  2. 服务器端首先在入口文件中,根据Node.js中的http模块的creatServer来创建server。创建server传入两个参数,一个是请求req(也就是request),另一个是响应res(也就是response)。
  3. 创建server时,我们需要根据请求req中的路由path开发对应的函数处理,也就是说,我们要对浏览器中输入的路径做对应的处理,这也就是接口开发。但是在做接口开发前,难免会涉及登录的问题,而登录大多是通过cookie实现的,所以在接口开发前,我们首先需要解析req请求头中的cookie信息,看看是否已经存在userId。如果不存在userId,说明此时还未登录(游客身份),那么我们就先给这个游客生成一个userId,并且设在cookie里,为什么要这样做呢?因为当游客的cookie里有了userId以后,他再去请求登录页面的时候,我们就可以根据他在cookie的userId标识他,并且得到他的名字。
  4. 为什么要用session呢?一是因为cookie的大小存在限制,二是因为cookie会暴露信息。如果只用cookie进行登录,那么必然要通过cookie传递一些敏感信息(而不是本例中的userId)。通过session,可以利用userId包装敏感信息,也就是让userId作为键值(key),登录的敏感信息作为属性值(value)。然后再把session内容存入req.session中,我们就可以在接口开发里根据req.session判断用户是否登录。
  5. 还有一点,光用session就可以了吗?session是存在内存中的,如果突然断电,此时session中的内容可就没了。所以,光用session还不是最优的,最好带上redis一起玩。redis的数据是保存在磁盘里的,所以断不断电无所谓了。
  6. 为啥要用nginx反向代理呢?前端跑在8001端口,服务端在8000端口,当你想联调的时候,在前端访问服务器端的api就会产生跨域问题(跨域就是指协议、域名、端口其中之一不一样),导致无法访问。通过nginx反向代理,可以通过一个统一的端口(本例中是8080)实现前后端的联调。

二、接口开发

1.登录(api/user/login)

在这里插入图片描述
首先解析req得到usernamepassword,通过这两个关键词在mysql数据库中找到对应的usernamerealname。然后,看,就可以把登录信息给session了,之后再后面创建/删除/更新博客的时候就可以看看req.session里有没有username,有的话就是登录了,没有的话就是没登录,不给修改的权限。

2. 博客系列接口 (api/blog/…)

在这里插入图片描述
在客户端发送POST请求的api中,都需要先判断用户是否登录,也就是

if(!req.session.username){ // 判断有没有登录
         return Promise.resolve(new ErrorModel("尚未登录"))
    }

然后才能做对应的操作。值得注意的是,这里的接口开发都用了Promise,因为这些操作都是异步的,而不是每次刷新浏览器,这些接口都得运行一遍。

好家伙,我学了这些头脑里才有一个大概的开发流程,学个骨灰盖饭。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值