node开发一个接口详细步骤

最近在做后台系统改版,由于目前接口还没出来,就自己用nodejs写了个简单的接口。

我这里用的是nodejs+mysql的

这里不讲nodejs和mysql的安装。这些基础略过。

首先创建文件夹。cd 进入文件。

npm init 进行初始化

安装下面的包

npm install body-parser express mysql cors -S

这里下载mysql是操作mysql数据库的一个js插件,并不是数据库软件

下面一步步进行操作

文章最后也展示出来了页面最后效果。不想一步步跟着做的,可以直接看文章最后,当然还是希望大家跟着走一遍,可以加深印象。

首先创建程序的入口文件 index.js const express = require(\'express\') const app = express() app.listen(8088, () => { console.log(\'服务启动\') }) app.get(\'/\', (req, res) => { res.send(\'<div>hello world</div>\') }) 件

res.json 以json对象的形式返回去

res.send 以也页面的形式返回去

res.download以文件的方式返回去,前端请求会下载此文

运行 server.js测试get请求 在package.json中配置 "start": "hotnode index.js" hotnode 需要安装 npm i hotnode -g hotnode然后运行 npm start就可以了 这个插件可以让你的node程序热更新 当然 nodemon index.js也可以 nodemon 也需要安装 npm i nodemon -g 接着测试post: app.post(\'/login\', (req, res) => { res.json(\'<div>hello login</div>\') }) app.post(\'/text\', (req, res) => { res.json(\'<div>hello text</div>\') })

post不支持浏览器直接访问,这个时候要用postman软件

node开发一个接口详细步骤

设置登录拦截 let login = false; //如果未登录,返回未登录,否则,继续向下匹配,回调函数接收三个参数,最后一个是next,继续向下执行,路径一定要写在最上面,不然会先被test捕捉到,test没有执行next,就会捕捉不到请求。 app.all(\'*\', (req, res, next) => { if(!login) return res.json(\'未登录\') next() }) app.post(\'/test\', (req, res) => { res.json(\'test\') }) 有参数时: 引入解析参数中间件: const express = require(\'express\') const app = express() // 解析参数 const bodyParser = require(\'body-parser\') let login = true; // json请求 app.use(bodyParser.json()) // 表单请求 app.use(bodyParser.urlencoded({extended: false})) app.listen(8088, () => { console.log(\'服务启动\') }) // 如果未登录,返回未登录,否则,继续向下匹配,回调函数接收三个参数,最后一个是next,继续向下执行,路径一定要写在最上面,不然会先被test捕捉到,test没有执行next,就会捕捉不到请求。 app.all(\'*\', (req, res, next) => { if(!login) return res.json(\'未登录\') next() }) app.post(\'/test:data\', (req, res) => { return res.json({query: req.query, data: req.params, json: req.body}) })

node开发一个接口详细步骤

如需要前后端联调,需要用到跨域中间件cors: const cors = require(\'cors\') app.use(cors)// 解决跨域

我目前还没有用到,所以代码中还未引入

开始连接数据库 首先mysql建一个表students,存入以下数据

node开发一个接口详细步骤

然后使用mysql插件连接数据库 const mysql = require(\'mysql\') const option = { host: \'localhost\', user: \'root\', password: \'root\', port: \'3306\', database: \'nodecms\', connectTimeout: 5000, //连接超时 multipleStatements: false //是否允许一个query中包含多条sql语句 } const conn = mysql.createConnection(option); app.post(\'/login\', (req, res) => { conn.query("SELECT * FROM students", (e, r) => { res.json(new Result({ data: r })) }) }) function Result ({ code = 1, msg = \'\', data = {} }) { this.code = code; this.msg = msg; this.data = data; } 数据库数据返回成功

node开发一个接口详细步骤

做断线重连机制

这里只贴出来了要新增的部分

let conn; reconn(); // 断线重连机制 function reconn() { conn = mysql.createConnection({ option }) conn.on(\'error\', err => { err.code === \'PROTOCOL_CONNECTION_LOST\' && setTimeout(reconn, 2000) }) } 再进行改造,适应高并发,连接上连接池,断线连接函数上做以下处理

这里只贴出来了要修改的部分 上面一部分改为以下部分

let pool; repool() app.get(\'/login\', (req, res) => { pool.getConnection((err, conn) => { conn.query("SELECT * FROM students", (e, r) => { if(e) throw error res.json(new Result({ data: r })) }) pool.releaseConnection(conn) // 释放连接池,等待别的连接使用 }) }) // 断线重连机制 function repool() { // 创建连接池 pool = mysql.createPool({ ...option, waitForConnections: true, //当无连接池可用时,等待(true)还是抛错(false) connectionLimit: 100, //连接数限制 queueLimit: 0 //最大连接等待数(0为不限制) }) pool.on(\'error\', err => { err.code === \'PROTOCOL_CONNECTION_LOST\' && setTimeout(repool, 2000) }) app.all(\'*\', (_,__, next) => { pool.getConnection( err => { err && setTimeout(repool, 2000) || next() }) }) } 最后引入路由,把页面拆分开: 本次版本的最终内容

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwypgf.html