我的项目背景flexiManage是以色列一家初创公司flexiWAN开源的基于SD-WAN平台的应用层的框架,包含flexiManage服务端框架,基于此服务端框架进行了一些借鉴和改良
目录构造apibillingbinbrokercontrollersdeviceLogiclogginglogsmigrationsmodelsnotificationsperiodicpublicroutesservicesutilswebsocketauthenticate.jsconfigs.jsexpressserver.jsflexibilling.jsmongoConns.jsrateLimitStore.jstoken.js踩坑案例BFF抹掉https的node模块验证[bug形容] 做验证应用服务端及硬件侧未配置ssl,而node启动https模块会默认验证ssl,导致无奈启动服务
[bug剖析] node模块的ssl验证
[解决方案] 起一层bff用于透传接口,后续不便将后续服务层进行微服务化等解决
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';const express = require('express');const request = require('request');const app = express();const bodyParser = require('body-parser');const router = express.Router();const SUCC_REG = /^2[0-9]{2}$/app.use(bodyParser.urlencoded({ extended: false }));app.use(bodyParser.json());const headers = { 'authorization': "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZmEzYTY5OGZjNDI2ODEwODc3MDYzZDQiLCJ1c2VybmFtZSI6Im1jYWlkYW9Ac2luYS5jb20iLCJvcmciOiI1ZmFkZTkyZDljNGQ2MDQyOWRjN2RhNmMiLCJvcmdOYW1lIjoidHQiLCJhY2NvdW50IjoiNWZhM2E2OThmYzQyNjgxMDg3NzA2M2QzIiwiYWNjb3VudE5hbWUiOiJ0ZXN0IiwicGVybXMiOnsiam9icyI6MTUsImJpbGxpbmciOjMsImFjY291bnRzIjo3LCJvcmdhbml6YXRpb25zIjoxNSwiZGV2aWNlcyI6MTUsInRva2VucyI6MTUsImFwcGlkZW50aWZpY2F0aW9ucyI6MTUsIm1lbWJlcnMiOjE1LCJ0dW5uZWxzIjoxNSwiYWNjZXNzdG9rZW5zIjoxNSwibm90aWZpY2F0aW9ucyI6MTUsInBhdGhsYWJlbHMiOjE1LCJtbHBvbGljaWVzIjoxNX0sImlhdCI6MTYwODExMjcwMiwiZXhwIjoxNjA4NzE3NTAyfQ.LYFv1pBP1540gb-NRCCe4dvbQ0T9HSoZHMkD8xkMFLc", 'Content-Type': 'application/json' }, errMsg = { msg:'unexpected response' }, baseUrl = 'https://10.100.37.101:3443';// 获取所有设施接口app.get('/api/devices',(req,res)=> { console.log(req.url) request({ url: `${baseUrl}${req.url}`, method: 'GET', headers }, (err, response, body) => { console.log(response.statusCode) if(SUCC_REG.test(response.statusCode)) { res.send({code: 200,msg:JSON.parse(response.body)}) } else { res.send(errMsg) } })});// 获取单个设施接口app.get('/api/devices/:id',(req,res)=> { console.log(req.url) request({ url: `${baseUrl}${req.url}`, method: 'GET', headers }, (err, response, body) => { console.log(response.statusCode) if(SUCC_REG.test(response.statusCode)) { res.send({code: 200,msg:JSON.parse(response.body)}) } else { res.send(errMsg) } })});// 获取路由接口app.get('/api/devices/:id/routes',(req,res)=> { console.log(req.url) request({ url: `https://10.100.37.101:3443/api/devices/${req.params.id}/routes`, method: 'GET', headers }, (err, response, body) => { console.log(response.statusCode) if(SUCC_REG.test(response.statusCode)) { res.send({code: 200,msg:JSON.parse(response.body)}) } else { res.send(errMsg) } })});// 启动单个设施app.post('/api/devices/:id/apply/start',(req,res)=> { console.log(req.url); request({ url: `${baseUrl}/api/devices/${req.params.id}/apply`, method: 'POST', headers, body: JSON.stringify({ "method": "start" }) }, (err, response, body) => { let r = JSON.parse(body) if(r.status == 'completed') { res.send({code: 200,msg:'start success'}) } else { res.send({msg: 'start error'}) } })});// 进行单个设施app.post('/api/devices/:id/apply/stop',(req,res)=> { console.log(req.url) request({ url: `${baseUrl}/api/devices/${req.params.id}/apply`, method: 'POST', headers, body: JSON.stringify({ "method": "stop" }) }, (err, response, body) => { let r = JSON.parse(body) if(r.status == 'completed') { res.send({code: 200,msg:'stop success'}) } else { res.send({msg: 'stop error'}) } })});// 同步单个设施app.post('/api/devices/:id/apply',(req,res)=> { console.log(req.url) request.post({ url: `${baseUrl}${req.url}`, headers, body: JSON.stringify({ "method": "sync" }) }, (err, response, body) => { let r = JSON.parse(body) if(r.status == 'completed') { res.send({code: 200,msg:'update success'}) } else { res.send({msg: 'update error'}) } })});// 删除单个设施app.delete('/api/devices/:id',(req,res)=> { console.log(req.url) request({ url: `${baseUrl}${req.url}`, method: 'DELETE', headers }, (err, response, body) => { console.log(response.statusCode) if(SUCC_REG.test(response.statusCode)) { res.send({code: 200,msg:JSON.parse(response.body)}) } else { res.send(errMsg) } })});// 更新设施详情app.put('/api/devices/:id',(req,res)=> { request({ url: `${baseUrl}${req.url}`, method: 'PUT', headers, body: JSON.stringify(req.body) }, (err, response, body) => { console.log('put device', response.statusCode) if(SUCC_REG.test(response.statusCode)) { res.send({code: 200,msg:JSON.parse(response.body)}) } else { res.send(errMsg) console.log('error device', response.statusCode, response.body) } })});// 删除隧道接口app.post('/api/devices/apply/delTunnel',(req,res)=> { console.log('req.body', req.body) request.post({ url: `${baseUrl}/api/devices/apply`, headers, body: JSON.stringify(req.body) }, (err, response, body) => { let r = JSON.parse(body) console.log(r) if(r.status == 'completed') { res.send({code: 200,msg:'删除隧道胜利'}) } else { res.send({msg: r.error}) } })});// 建设隧道接口app.post('/api/devices/apply/createTunnel',(req,res)=> { console.log(req.body) request.post({ url: `${baseUrl}/api/devices/apply`, headers, body: JSON.stringify(req.body) }, (err, response, body) => { let r = JSON.parse(body) console.log(r) if(r.status == 'completed') { res.send({code: 200,msg:r.message}) } else { res.send({msg: r.error}) } })});// 获取所有隧道接口app.get('/api/tunnels',(req,res)=> { console.log(req.url) request({ url: `${baseUrl}${req.url}`, method: 'GET', headers }, (err, response, body) => { console.log(response.statusCode) if(SUCC_REG.test(response.statusCode)) { res.send({code: 200,msg:JSON.parse(response.body)}) } else { res.send(errMsg) } })});app.listen(6000, '127.0.0.1', ()=>{ console.log('app server');});express申请接口申请体不同无奈匹配
...