js开发服务端(node)业务时和客户端的区别

node开发与前端开发的区别

node后端开发的关注点

  1. 要关心内存是否泄漏
  2. 关心cpu和内存的占用,这些资源在服务端是稀缺资源
  3. 关心网站服务端的稳定性和安全性(因为你的接口是暴露在外网上的)

校验用户采用cookie的问题

1.不安全,开发者可以通过js盗取并设置来伪装其他用户登录账户操作数据

cookie(document.cookie="键=新值")

可以通过在服务端的
cookie设置时添加httpOnly来增加cookie操作权限,来规定该cookie只允许服务端来操作.如:

res.setHeader('Set-Cookie',`username=${data.username};path=/;httpOnly;expires=${getCookieExpires()}`))

2.用户的敏感信息暴露到外网上(用户名有可能是手机号,qq号等 ,理论上也是安全,隐私问题)
3.由于cookie的大小限制,如果传输信息量过大,则cookie可能不适用,并会造成流量浪费

session的产生

1.针对cookie的问题,产生了session的解决方案
2.session的本意是指,我们通过在cookie中设置一个经过加密算法生成的字符串作为用户标识(也叫userId),然后在后台根据userId,对应出正常的用户名和其他敏感信息,敏感信息在用户登录成功后保存到对应的内存中

//解析session

    const SESSION_DATA = {}
    let needCookie = false
    let userId = req.cookie.userid
    if (userId) {
      if (!SESSION_DATA[userId]) {
        SESSION_DATA[userId] = {}
      }
    } else {
      needCookie = true
      userId = `${Date.now()}_${Math.random()}`
      SESSION_DATA[userId] = {}
    }
    req.session = SESSION_DATA[userId]
    
//设置cookie并返回 

 if (needCookie) {
      res.setHeader('Set-Cookie', `userid=${userId};path=/;httpOnly;expires=${getCookieExpires()}`)
}
    res.end(
      JSON.stringify(data)
    )

目前这种方案的缺点

1.实现:目前这种session的数据是直接 存储在js的对象中的,数据放在了node.js进程的内存中

2.缺点:

<1>进程内存是有限的,如果访问量过大,那么就会造成内存使用暴增,容易发生内存泄漏,造成进程奔溃,服务挂机

<2>正式上线后项目运行的是多进程,进程间的内存是无法共享的(项目大了之后,可能是集群部署这是多机器的,也无法共享数据)

针对session的问题----redis

1.特点

webserver最常用的数据库 ,数据存储在内存中

2.优点

相比于 mysql,访问速度快(硬盘和内存的访问速度不是一个数量级的)

3.缺点

成本昂贵,可存储的数据量小(内存的硬伤)

redis解决方案为什么适用session?

<1>session 访问频繁,对性能要求极高

<2>session可以不考虑断电数据丢失的问题

<3>session数据量不会太大

redis解决方案为什么不适用网站数据?

<1>操作频率不是太高

<2>断电不能丢失,必须保留

<3>数据量太大,内存成本太高

和前端联调

<1>登录功能依赖cookie,所以必须使用浏览器来联调

<2>cookie是跨域不共享的,所以前端和后端必须是同域的才能访问

<3>可以使用nginx代理,实现接口联调

nginx介绍

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

<2>一般用于做静态服务\负载均衡

<3>反向代理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值