前后端交互项目总结

mac2026-09-20  11

一、http模块+fs模块的基本使用

1.http模块:

(1)服务器构建流程: ① 导入http模块 ② 使用http模块创建一个服务器- ③ 给服务器添加请求处理函数fn–>绑定端口 (2)代码实现:

var http = require('http'); //导入一个处理http请求的模块 http.createServer(fn).listen(8888);//使用http模块的createServer方法创建一个http服务器,监听8888端口 function fn (request, response) { response.writeHead(200, { 'Content-Type': 'text/plain;charset=utf-8' });// 发送 HTTP 头部 , HTTP 状态值: 200 : OK, 内容类型: text/plain response.end('hello, 我是用node创建的一个服务器');// 发送响应数据 "Hello World" } console.log('服务器地址: http://127.0.0.1:8888/');// 提示用户服务器相关信息

2.fs模块:

(1)文件夹操作: 1)创建文件夹–fs.mkdir 2)读取文件夹–fs.readdir 3)删除空文件夹–fs.rmdir (2)文件操作: 1)写入(创建)文件—fs.writeFile 2)读取文件内容–fs.readFile 3)向文件中追加内容–fs.appendFile 4)删除文件–fs.unlink

二、express的基本使用

1.下载: cnpm i express -g cnpm i express-generator -g 2.使用express生成器自动创建express项目: express 项目名 3.启动项目: nmp start

三、MongoDB数据库的基本使用

1.下载安装: 官网下载安装包并安装(安装时记得取消install mongoDB compass,否则会安装很久很久),安装完成后在mongodb的bin目录的同级下创建 data/db,然后将bin目录配置进入环境变量。 2.启动: 以管理员身份打开cmd,执行命令: mongod --dbpath db的路径 3.使用: cmd输入命令:mongo ,开启交互模式 4.基础命令: a.查询数据库: show dbs b.创建/切换数据库: use 数据库名(如果存在就切换,不存在就创建; 创建后,要往里面插入数据才能在show dbs时看到) c.显示当前所处数据库:db d.删除数据库:db.dropDatabase() e.基本插入:db.collection.insert(document) f.不存在就插入,存在就更新:db.collection.save(document) 如果不指定 _id 字段 save() 方法类似于 insert() 方法。 如果指定 _id 字段,则会更新该 _id 的数据。 g.同时插入多条数据:db.collection.insertMany() h.查询: 直接查询:db.collection.find() 查询时进行格式化:db.collection.find().pretty() i.删除:collection.remove(object)

四、路由,中间件,commonjs模块化的基本用法

1.路由

(1)作用:通过路由,服务端能精确的识别你的请求,并作出相应的响应。 (2)添加自己的路由: 1)先在routes中创建user.js文件,写下路由规则 2)然后规则里面分别处理,/adduser与/deluser请求 3)在入口的js文件app.js中require我们的user.js文件

2.中间件

(1)定义:在请求开始到请求结束的中间,可以通过一定的方式插入你想要执行的逻辑代码,那么这些被插入的代码就是中间件。 (2)作用: 对用户的请求做身份验证 对请求做出的参数注入 最简单的日志打印 … (3)写一个自己的中间件: 语法:app.use(你的中间件代码) 例:

app.use("*",function(req, res, next){ var parobj=req.query||req.body; console.log("获取所有get请求的参数对象:",parobj) })

3.commonJS规范

(1)基本概念: 1)CommonJS是服务器端模块的规范.为同步模块规范。 2)根据CommonJS规范,一个单独的文件就是一个模块。 3)每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他模块读取。 2.导出和引入模块 (1)导出 语法:module.exports (2)引入 语法:require

五、登录注册相关技术概念

1.RestfulAPI 规范(表述性状态传递(Representational State Transfer))

(1)目的: 1)为了更加规范的设计接口,提高可用性 2)为了让大家在接口开发和使用上达成共识,降低沟通成本 (2)核心内容: 1)API与用户的通信协议,尽量使用HTTPs协议 2)尽量返回JSON,避免使用XML 3)规定了以下几种请求方式 a.GET(SELECT)获取资源 b.POST(CREATE)创建资源 c.PUT(UPDATE)更新资源,客户端需要提供新建资源的所有属性 d.DELETE(DELETE)删除资源 e.HEAD(SELECT)只获取某个资源的头部信息 f.PATCH(UPDATE)更新资源的部分属性(很少用,一般用POST代替) g.OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。 4)规定了接口返回数据的结构

{ "code": 200, "message": "啊哈哈", "succ": true, "data": [] }

2.接口测试:postman

3.接口文档发展:

(1)测试日志 log文件 (2)world文档/execl/ppt (3)网页形式,如今的主要形式—可通过apidoc工具生成,比较简单

4.数据加密:

md5和sha256

<script src="http://cdn.bootcss.com/blueimp-md5/1.1.0/js/md5.js"></script> <script src="https://cdn.bootcss.com/js-sha256/0.9.0/sha256.js"></script>

通过script标签引入js文件,把要加密的数据用括号括起来,前面加上加密方法名称

5.鉴权:

(1)session鉴权

1)原理和流程: 当用户登录成功后,后端会生成一个session对象,并产生一个sessionId标识这个对象。然后会把这个sessionId返回给前端,存储在前端浏览器cookie中,从此这个sessionId就代表用户的这个身份了。 当用户在登录后要发起任何操作,都会自动的带上这个sessiId向服务端表明自己的身份,服务收到这个sessionId后回去寻找到对应的session对象,如果找到了就表示身份验证通过,否在就不通过。 然后如果用户不登录直接发起查询操作去请求数据,那么由于没有后端颁发的sessionId,直接就会被后端拒绝验证。 2)express实现流程: a.nodejs后端安装和使用cookie和session中间件(为了实现处理session和token的能力) b.当用户登录成功时,后端向req.session中写入数据 c.当后端返回数据给前端时,会自动生成sessionid,标识当前登录了的这个用户 d.登陆之后,前端的每一次请求都会自动带上sessid(因为会自动发送cookie) e.后端收到前端请求后通过sessionid自动找到session,然后会通过session中存储的用户基本信息来判断用户是否有效

(2)token鉴权

1)基本说明: 在上面我们使用session鉴权看似好像已经解决了只要知道接口地址就可以成功的发起请求的弊端,然后session鉴权方式却有个核心的问题存在,那就是无法直接支持跨端使用。 即:当你的客户端是一个原生平台(iOS, Android)时,Cookie是不被直接支持的,这时采用Token认证却可以很容易的直接实现。 另外:使用了token就可以直接杜绝一种常见web攻击----跨站请求伪造–csrf 2)基于Token的身份验证流程: a.客户端使用用户名和密码请求登录 b.服务端收到请求,验证登录是否成功 c.验证成功后,服务端会返回一个Token给客户端,反之,返回身份验证失败的信息 d.客户端收到Token后把Token用一种方式存储起来,如(headers/ cookie / localstorage / sessionstorage / 其他 ) e.客户端每次发起请求时都会将Token发给服务端 f.服务端收到请求后,验证Token的合法性,合法就返回客户端所需数据,反之,返回验证失败的信息 3)JWT算法: 生成Token的解决方案有许多,目前主流使用的为 Json Web Tokens 算法. JWT标准的Tokens由三部分组成: a.header:包含token的类型和加密算法 b.payload:包含token的内容 c.signature:通过密钥将前两者加密得到最终的token 4)使用nodejs实现jwt算法做token鉴权 1)安装jwt模块 npm install jsonwebtoken -S 2)在js文件中引用jsw模块

var jwt = require("jsonwebtoken");

3)生成Token

var content = { msg: "zhangsan",sex:"man" } ; // 要生成token的主题信息【这里可以包含用户的一些相关信息,content需要为一个对象,否则有可能会报错】 var secretOrPrivateKey = "blogzl.com" // 这是加密的key(密钥或私钥) var token = jwt.sign(content, secretOrPrivateKey, { expiresIn: 60 * 60 * 24 // 24小时过期,以s作为单位 });

4)校验Token

var token = "获取的前端传来的token";//rq.body.token || rq.query.token || rq.headers["x-access-token"]; // 可以从body或query或者header中获取token var secretOrPrivateKey = "blogzl.com" // 这是加密的key(密钥或私钥) jwt.verify(token, secretOrPrivateKey, function (err, decode) { if (err) { // 当token过期,或这是一个伪造的token,或这是无效的token时会触发此逻辑 console.log(err); } else { console.log(decode); // { msg: "zhangsan",sex:"man" } } })
最新回复(0)