nodejs基本使用
nodejs的来源及作用
目的:为构建高性能服务器
两种方式:交互模式(可以在命令行执行)和JS文件
是什么: Node.js 就是运行在服务端的 JavaScript,基于V8进行运行
作用:(1)Node能用来操作系统底层,操作硬件
(2)能够用来创建服务器,构建后端接口
nodejs模块
核心模块(nodeJS官网上的都是核心模块)、用户模块、自定义模块
核心模块之http模块
构建服务器
构建流程:
① 导入http模块
② 使用http模块创建一个服务器-
③ 给服务器添加请求处理函数fn-->绑定端口
核心模块之file模块
文件夹操作
fs.mkdir创建文件夹
fs.rmdir删除空文件夹(只能删除空文件夹)
fs.readdir读取文件夹
文件操作
fs.writeFile写入文件(文件不存在就创建文件,存在则写入内容)
fs.readFile读取文件内容
fs.appendFile追加文件内容
fs.unlink删除文件
express
express是一个简洁而灵活的 node.js Web应用框架
核心特性
路由:定义了路由表用于执行不同的 HTTP 请求动作
中间件: 可以设置中间件来响应 HTTP 请求,
其作用:1、对此用户的请求做身份验证
2、 对请求做出的参数注入
3、甚至是最简单的日志打印
jade模板:可以通过向模板传递参数来动态渲染 HTML 页面,
创建模板文件,一般用于服务端渲染页面
安装及使用:
安装express库和生成器
cnpm/npm i express -g
cnpm/npm i express-generator -g(不能漏掉enerator模块)
构建项目:express 项目名
跳转到package.json目录下安装相关的包 yarn 或者 cnpm i 或者 npm i
启动项目: SET DEBUG=mypro1:* & npm start
模块化
在JavaScript而言,模块化有几种规范,如amd,cmd,commonJS,es6的模块化
commonJS:服务器端模块的规范.为同步模块规范
MongoDB
MongoDB是一个由C++ 语言编写的基于分布式文件存储的数据库
与MySQL对比
Mysql等数据库的是类似于Excel表格式的数据,这种表格式的数据库也称之为关系型数据库,表叫做关系表。
MongoDB数据库存储的是类似json格式的数据,称之为bson,这种数据库由于比较自由,数据间并不一定有关系,我们称之为非关系型数据库
MongoDB作用:
1、数据的高并发读写
2、数据的海量数据存储
3、数据的高可扩展性
4、数据的高可用性
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/465b9d2e425141e74b2af3a972f943e2.png)
数据库相关指令:
查看命令提示:help
查询数据库: show dbs
创建/切换数据库: use 数据库名
显示当前所处数据库:db
查看MongoDB服务器地址:db.getMongo()
删除数据库:db.dropDatabase()
collection相关指令
查看集合show collections 或 show tables 命令
删除集合 db.collection.drop()
document相关指令
插入db.collection.insert()
批量插入db.collection.insertMany()
查询db.collection.find()
skip()h和limit()可以实现分页查询
sort(),1为升序,-1为降序
查询时格式化db.collection.find().pretty()
更新db.collection.update()
db.collection.save(),指定_id,就更新该条数据,不指定则类似于insert()
删除db.collection.remove() g)
RestfulAPI 规范
目的:规范的设计接口、提高可用性、降低沟通成本
核心内容
1、尽量返回JSON,避免使用XML
2、规定了几种请求方式
1)GET(SELECT)获取资源
2)POST(CREATE)创建资源
3)PUT(UPDATE)更新资源,客户端需要提供新建资源的所有属性
4)DELETE(DELETE)删除资源
OPTIONS:获取信息
3、规定了接口返回数据的结构
{
"code": 200,
"message": "啊哈哈",
"succ": true,
"data": []
}
4、 应该将API的版本号放入URL
如:https://api.example.com/v1/
github就是采用这种做法
5、 规定的一些通用字段
url?limit=10 # 指定返回记录的数量
url?offset=10 # 指定返回记录的开始位置
url?page=2&per_page=100 # 指定第几页,以及每页的记录数
url?sortby=name&order=asc # 指定返回结果按照哪个属性排序,以及排序顺序
url?state=close # 指定筛选条件
用户鉴权
常用鉴权方式
1.HTTP Basic Authentication----http协议本身的身份验证方法
2.session-cookie----session鉴权方式
3.Token 验证-------token鉴权方式【目前主要使用的方式】
4.OAuth(开放授权)---一般用于第三方授权,如你使用微信,支付宝等相关开发
session鉴权
鉴权流程
1.nodejs后端安装和使用cookie和session中间件(为了实现处理session和token的能力)
2.当用户登录成功时,后端向req.session中写入数据
3.当后端返回数据给前端时,会自动生成sessionid,标识当前登录了的这个用户
4.登陆之后,前端的每一次请求都会自动带上sessid(因为会自动发送cookie)
5.后端收到前端请求后通过sessionid自动找到session,然后会通过session中存储的用户基本信息来判断用户是否有效
缺点:无法直接支持跨端使用,一般是web端支持
token鉴权
鉴权流程
1.客户端使用用户名和密码请求登录
2.服务端收到请求,验证登录是否成功
3.验证成功后,服务端会返回一个Token给客户端,反之,返回身份验证失败的信息
4.客户端收到Token后把Token用一种方式存储起来,如(headers/ cookie / localstorage / sessionstorage / 其他 )
5.客户端每次发起请求时都会将Token发给服务端
6.服务端收到请求后,验证Token的合法性,合法就返回客户端所需数据,反之,返回验证失败的信息
用途:token是任意端都支持,并且token在服务端的生成方式不一样,一般是由jwt算法实现,验证也是做算法验证