使用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: '账号密码有误'
})
}
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
使用Express写接口的更多相关文章
- express 写接口
实例下载:百度云盘免密码 (): 指注释 一.准备工作 1.安装express npm install express -g npm install express-generator -g 2.初始 ...
- node+pm2+express+mysql+sequelize来搭建网站和写接口
前面的话:在这里已经提到了安装node的方法,node是自带npm的.我在技术中会用es6去编写,然后下面会分别介绍node.pm2.express.mysql.sequelize.有少部分是摘抄大佬 ...
- 前端必备之Node+mysql+ejs模版如何写接口
前端必备之Node+mysql+ejs模版如何写接口 这星期公司要做一个视频的后台管理系统, 让我用Node+mysql+ejs配合写接口, 周末在家研究了一下, 趁还没来具体需求把研究内容在这里分享 ...
- java为移动端写接口
java作为一门后端语言,其厉害之处在于web,大家比较熟知的各种网络应用,java都能做,那么在这个移动优先的时代,如何继续发挥java的强大呢.通常是让java作为一个app的服务端,为app客户 ...
- 用yii2给app写接口(下)
上一节里我们讲了如何用Yii2搭建一个能够给App提供数据的API后台应用程序.那么今天我们就来探讨下授权认证和通过API接口向服务器提交数据以及如何控制API接口返回那些数据,不能返回那些数据. 授 ...
- [MyBatis]DAO层只写接口,不用写实现类
团队开发一个项目,由老大架了一个框架,遇到了DAO层不用写接口了,我也是用了2次才记住这个事的,因为自己一直都是习惯于写DAO层的实现类,所以,习惯性的还是写了个实现类.于是遇到错误了. 找不到那个方 ...
- JAVA写接口傻瓜(?)教程(一)
当一个安卓开发人员/微信小程序开发者想做点什么的时候,如果他发现没有合适的接口,那么单机安卓.本地数据库emmm.没了接口就好像老人没了拐杖.盲人没了墨镜,完全可以称得上是举步维艰.生活艰难到需要自己 ...
- 跨域的案例 以百度接口/手写接口为例,还有jQuery写法
仅在js部分输入即可 百度接口的案例 <script> function fn(data){ console.log(data) } </script> <script ...
- 【转载】php如何给APP端写接口
如何写好接口 目的:清楚明白所写接口的用途 安全性:做好接口的安全性,防止接口数据泄露,做好必要的参数加密措施 按需分配: 接受值和返回值要实用,不接受和返回不需要的数据,返回值返回什么应与使用者时时 ...
- 使用python requests库写接口自动化测试--记录学习过程中遇到的坑(1)
一直听说python requests库对于接口自动化测试特别合适,但由于自身代码基础薄弱,一直没有实践: 这次赶上公司项目需要,同事小伙伴们一起学习写接口自动化脚本,听起来特别给力,赶紧实践一把: ...
随机推荐
- 力扣704(java&python)-二分查找(简单)
题目: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: ...
- 斩获大奖|阿里云PolarDB-X引领云原生分布式数据库新时代
简介:阿里云原生分布式数据库PolarDB-X荣获"2021年度最佳分布式数据库". 12月15-16日,以"引领分布式云变革 助力湾区数字经济"为主题的全球分 ...
- [FE] 实时视频流库 hls.js 重载切换资源的方式
hls 播放需要先 attachMedia,然后 loadSource. 如果切换 resource,需要先执行 hls.destroy(),否则会出现混乱. destroy 之后再依次进行 hls ...
- dotnet UNO 如何在调试下输出界面层级结构
本文将告诉大家如何在 UNO 里面将界面的层级结构输出到调试窗口 实现方法非常简单,和 WPF 或 UWP 等的方法是一样的,那就是通过可视化树遍历的方式,如以下代码 static class UIS ...
- 2019-2-27-VisualStudio-插件-翻译注释
title author date CreateTime categories VisualStudio 插件 翻译注释 lindexi 2019-02-27 15:50:33 +0800 2019- ...
- vue中使用vue-b2wordcloud创建词云
安装使用 安装:使用npm install vue-b2wordcloud --save或者直接在vue ui中添加vue-b2wordcloud运行依赖 使用:在main.js中导入使用 impor ...
- js部分数组方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Xcode编译WebKit
下载WebKit源码 1)进入https://webkit.org/ 2)点击页面的 Get Started 进入新页面,如下图所示 3)点击 Getting the code 进入新页面,如下图所示 ...
- MAPREDUCE实践篇
1.编程规范 (1)用户编写的程序分成三个部分:Mapper,Reducer,Driver(提交运行mr程序的客户端) (2)Mapper的输入数据是KV对的形式(KV的类型可自定义) (3)Mapp ...
- 关于UE4对象静态/动态的销毁问题整理(AddToRoot、TWeakObjectPtr)
1.非UObject对象 即非UObject常规C++对象,创建销毁不赘述.但可以用智能指针:从而不用关心销毁逻辑: TSharedPtr<ClassA> MyObj = MakeShar ...