zoukankan      html  css  js  c++  java
  • 使用Express写接口

    接口规范

    随着前后端分离越来越普遍, 后端接口规范也就越来越重要了,一套良好的接口规范可以提升工作效率, 减少沟通障碍。通常我们都会采用RestfulApi方式来提供接口, 使用 JSON 来传输数据。

    Restful设计规范有一个的要求

    • 接口通信协议  http或https
    • 接口域名  最好是独立解析的域名www.xxx.com
    • 接口版本  将版本信息放在URL中   http://xxx/v1
    • url路径  网络中的任何东西都为资源,均使用名词表示(一般为复数形式)
    • 接口请求方式 GET/POST/PUT/DELTE等

    GET :从服务器取出资源(一项或多项)

    POST :在服务器新建一个资源

    PUT/PATCH :在服务器更新资源

    DELETE :从服务器删除资源

    • 过滤信息  通过在url上传参的形式传递搜索条件

    https://api.example.com/v1/zoos?limit=10:指定返回记录的数量

    • 状态码

    200 OK - [GET]:服务器成功返回用户请求的数据。

    201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。

    202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)

    204 NO CONTENT - [DELETE]:用户删除数据成功。

    301:永久重定向

    302:暂时重定向

    400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作。

    401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。

    403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。

    404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录。

    500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

    返回结果以JSON数据返回

     

    编写接口

    const express = require('express')
    const query = require('./db')
    // 实例化一个http对象
    const app = express()
    // 监听服务
    app.listen(3000)
    // express就可以不用引入body-parser 工作时建议引入
    // 接受JSON数据 content-type:application/json
    app.use(express.json())
    // content-type:applocation/x-form-urlencoded  id=1&name=aa ->解析  => querystring 或 qs
    app.use(express.urlencoded({ extended: false }))
    // 用户登录
    app.post('/v1/api/login', async (req, res) => {
      const { username, password } = req.body
      // 查询用户是否存在
      const sql = `select * from users where name='${username}' and password='${password}'`
      // 执行 如是查询不到数据返回空数据,查询到返回数组对象
      const data = await query(sql)
      if (data.length == 0) {
        return res.status(401).send({
          code: 1000,
          msg: '账号密码有误'
        })
      }
      // 账号和密码是存在的  把用户的状态存入到session中  ==》现在我们的是接口不在同一台服务器,cookie出问题
      // session将无法保存用户状态
      // jwt => json web token  在服务器端“加密”一个字符串,给客户端,客户端在后续的工作中,传过来给我,我在解密
      // 验证是否正确,正确则继续后续工作,不正确停
      // 加密 不能md5 不安全  admin=>xxxx 撞库  每次请求字符都不一样 非对称加密 rsa
      // cnpm i -S jsonwebtoken
    
      res.send(req.body)
    })

    接下来我们再写数据库文件db.js

    const mysql = require('mysql')
    // 连接mysql 数据库连接池,性能更高
    const db = mysql.createPool({
      // 池子中可用的连扫数量 越多越好,但是你也根据服务器自己能力而行
      // 默认值为10
      connectionLimit: 10,
      // mysql服务器地址
      host: '127,0,0,1',
      // 账号
      user: 'root',
      // 密码
      password: 'root',
      // 数据库名称
      database: 'mydb'
    })
    function query(sql){
      return new Promise((resolve,reject) => {
        // error是否有错,null没有错,有值就有错
        // results 取出的数据结果  数组
        db.query(sql,(error,results)=>{
          if(error){
            reject(error)
          }else{
            resolve(results)
          }
        })
      })
    }
    module.exports = query

     

    右侧打赏一下 代码改变世界一块二块也是爱
  • 相关阅读:
    [编]在Web站点中创建和使用Rss源
    Command 模式 Step by Step
    正则表达式 教程
    (转)mysql处理高并发,防止库存超卖
    【转】Golang- import 导入包的几种方式:点,别名与下划线
    win10 c++ build tools的安装
    Reporting Services VS designer 的一个 bug
    使用 AppDomain 让不支持线程安全的代码轻松支持线程安全
    应该怎样设计和开发软件
    Razor 也可说是一个模板引擎,用不着学习 T4 了
  • 原文地址:https://www.cnblogs.com/ht955/p/14277630.html
Copyright © 2011-2022 走看看