nodejs笔记(三)

本文详细介绍了如何使用Express构建RESTful API,包括GET和POST请求处理,CORS解决跨域问题,利用SQL进行数据库管理,以及使用JWT进行身份验证。特别关注了预检请求和简单请求的区别,以及前后端分离的Web开发模式。
摘要由CSDN通过智能技术生成

使用express写接口

const express=require('express')
const router=express.Router()
router.get('/get',(req,res)=>{
//通过req.query获取客户端通过查询字符串,发送到服务器的数据
   const query=req.query
   res.send({
   stasus:0,  //0表示成功,1表示失败
   msg:'get请求成功',
   //需要响应给客户端的数据
   data:query
})
})
//定义post请求
router.post('/post',(req,res)=>{
//通过req.body获取请求体中url-encoded格式的数据
 req.body=body
 res.send({
   status:0,
   msg:'post请求成功'
   data:body
})
})

使用CORS解决跨域问题
cors是express的一个第三方中间件,通过安装和配置cors中间件,可以很方便地解决跨域问题.
使用步骤分为如下3步:

  1. 运行npm install cors安装中间件;
  2. 使用const cors=require(‘cors’)导入中间件;
  3. 在路由之前调用app.use(cors())配置中间件
    CORS
    CORS(Cross-origin Resource Sharing,跨域资源共享)由一系列HTTP响应头组成,这些HTTP响应头决定浏览器是否阻止前端JS代码跨域获取资源.
    浏览器的同源安全策略默认会阻止网页’‘跨域’获取资源’',但如果接口服务器配置了CORS相关的HTTP响应头,就可以解除浏览器端的跨域访问限制.
    CORS跨域资源共享的注意事项
  4. CORS只要是在服务器端进行配置,客户端浏览器无需做任何额外的配置,即可请求开启了cors的接口.
  5. cors在浏览器中有兼容性,只有支持XMLHttpRequest Level2的浏览器,才能正常访问开启了CORS的服务器端接口(例如:IE10+,Chrome4+,FireFox3.5+).
    cors响应头部 Access-Control-Allow-Origin
    默认情况下,cors仅支持客户端发起GET,POST,HEAD请求
    CORS请求分类
    cors请求分为两大类,分别是简单请求和预检请求。
    简单请求:
    (1)请求方式:GET,POST,HEAD三者之一;
    (2)HTTP请求头部信息不超过以下几种字段:无定义头部字段,Accept,Accept-Language,Content-Language,DPR,Downlink,Save-Data,Viewport-Width,Width,Content-Type(只有三个值 application/x-www-form-urlencoded,multipart/form-data,text/plain)
    如果客户端希望通过PUT,DELETE等方式请求服务器的资源,则需要在服务器端,通过Access-Control-Allow-Mwthods来指明实际请求所允许使用的HTTP方法.
    预检请求
    只要符合以下任何一个条件的请求,都需要进行预检请求:
    (1)请求方式为GET,POST,HEAD之外的请求Method类型
    (2)请求头中包含自定义头部字段
    (3)向服务器发送了application/json格式的数据
//只允许POST,GET,DELETE,HEAD请求方法
res.setHeader('Access-Control-Allow-Methods','POST','GET','DELETE','HEAD')
//允许所有的http请求方法
res.setHeader('Access-Control-Allow-Methods','*')

简单请求和预检请求的区别
简单请求的特点:客户端与服务器之间只会发生一次请求.
预检请求的特点:客户端与服务器之间会发生两次请求,OPTION预检请求成功后,才会发起真正的请求.
使用SQL管理数据库
1.什么是SQL
SQL是结构化查询语言,专门用来访问和处理数据库的编程语言,能够让我们以编程的形式,操作数据库里面的数据
三个关键点:

  1. SQL是一门数据库编程语言
  2. 使用SQL语言编写出来的代码,叫做SQL语句
  3. SQL语言只能在关系型数据库中使用(例如 MySQL,Oracle,SQL Server),非关系型数据库(例如Mongodb)不支持SQL语言.
    2.SQL能做什么
    (1)从数据库中查询数据
    (2)向数据库中插入新的数据
    (3)更新数据库中的数据
    (4)从数据库中删除数据
    (5)创建新的数据库
    (6)在数据库中创建新表
    (7)在数据库中创建存储过程,视图
    掌握4种SQL语法
    where条件,and和or运算符,order by排序,count(*)函数
    Web开发模式
    目前主流的Web开发模式有两种,分别是:
    (1)基于服务端渲染的传统Web开发模式
    (2)基于前后端分离的新型Web开发模式
    服务端渲染的Web开发模式
    服务端渲染的概念:服务器发送给客户端的HTML页面,是在服务器通过字符串的拼接,动态生成的。因此,客户端不需要使用Ajax这样的技术额外请求页面的数据。
    前后端分离的Web开发模式
    前后端分离的概念:前后端分离的开发模式,依赖于Ajax技术的广泛应用。简而言之,前后端分离的web开发模式,就是后端只负责提供API接口,前端使用Ajax调用接口的开发模式。
    Session认证机制
    什么是cookie?
    cookie是存储在用户浏览器中的一段不超过4KB的字符串,它由一个名称,一个值和其他几个用于控制cookie有效期、安全期、使用范围的可选属性组成。
    不同域名下的cookie各自独立、每当客户端发起请求,会自动把当前域名下所有未过期的cookie一同发送到服务器,cookie的几大特性:
    1.自动发送
    2.域名独立
    3.过期时限
    4.4KB限制
    Session认证机制
//用户登录api
app.post('/api/login',()=>{
  //判断用户登录的信息是否正确
  //req.body获得请求体的数据
  //判断用户提交的信息是否正确
  if(req.body.username!=='admin'||req.body.username!=='000000'){
  return res.send({status:1,msg:'登录失败'})
}
//如果登录成功,将登录成功后的用户信息保存到session中
//只有成功配置express-session这个中间件后,才可以通过req点出来session这个属性
 req.session.user=req.body //给session添加user属性,这个属性中包括username,password
 req.session.islogin=true
 res.send({status:0,msg:'登录成功'})
})

//获取用户姓名的接口
app.get('/api/username',(req,res)=>{
  if(!req.session.islogin){
  return res.send(status:1,msg:'fail')
  }
  res.send({status:0,
    msg:'success',
    username:req.session.user.username
})
})
//退出登录接口
app.post('/api/logout',(req,res)=>{
//清空当前客户端对应的session信息  调用req.session.destroy()函数
req.session.destroy()
res.send({
status:0.,
msg:'退出登录成功!'
})
})

连接mysql数据库

// 导入mysql模块
const mysql = require('mysql')
// 创建数据库连接对象
const db = mysql.createPool({
    host: '127.0.0.1',
    user: 'root',
    password: 'admin123',
    database: 'my_db_01'
})
// 向外共享数据库连接对象
module.exports = db

express-jwt----解析token字符串

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值