当前位置: 首页 > news >正文

JavaScript调用ABAP后端发布的restful服务

1.消费代码

我这里账号密码配置在node.js的.env,所以注释了组装Authrization的部分

let url = 'http://localhost:3000/api/zbakewm?ACTION=GET_BSK_INFO'; // const USERNAME = '账号'; // const PASSWORD = '密码'; // function getAuthHeader() { // const credentials = btoa(`${USERNAME}:${PASSWORD}`); // return `Basic ${credentials}`; // } fetch(url, { method: 'POST', headers: { // 'Authorization': getAuthHeader(), 'Content-Type': 'application/json' }, body: JSON.stringify({ // 你的数据 "in_card_id": "300003390613" }) }) .then(response => response.json()) .then(data => { console.log(data); }).catch(error => { console.error('Error:', error); });

2.通过node.js服务提供代理,解决CORS跨域问题

// server.js require('dotenv').config(); const express = require('express'); const axios = require('axios'); const cors = require('cors'); const helmet = require('helmet'); const morgan = require('morgan'); const app = express(); const PORT = process.env.PORT || 3000; // 安全中间件 app.use(helmet()); // 设置安全 headers app.use(cors()); // 允许所有域名 app.use(morgan('combined')); // 日志 app.use(express.json({ limit: '10mb' })); // 构造 ABAP Basic Auth 头 const abapAuth = 'Basic ' + Buffer.from( `${process.env.ABAP_USER}:${process.env.ABAP_PASS}` ).toString('base64'); console.log('Generated Auth Header:', abapAuth); // 通用代理路由 app.use('/api', async (req, res) => { try { const targetPath = req.originalUrl.replace('/api', ''); const url = `${process.env.ABAP_URL}${targetPath}`; console.log(`Proxying to ABAP: ${url}`); const response = await axios({ method: req.method, url: url, headers: { // ...req.headers, Authorization: abapAuth, // Host: new URL(process.env.ABAP_URL).host, // 避免 Host 头问题 'Content-Type': req.headers['content-type'] || 'application/json' }, data: req.body, httpsAgent: process.env.NODE_TLS_REJECT_UNAUTHORIZED === '0' ? new (require('https')).Agent({ rejectUnauthorized: false }) : undefined, // 仅用于自签名证书测试!生产环境应使用有效证书 timeout: 180000 }); // 返回 ABAP 响应 res.status(response.status).json(response.data); } catch (error) { console.error('Proxy error:', error.message); if (error.response) { res.status(error.response.status).send(error.response.data); } else { res.status(502).json({ error: 'Failed to reach ABAP system' }); } } }); // 健康检查 app.get('/health', (req, res) => { res.json({ status: 'OK', timestamp: new Date().toISOString() }); }); app.listen(PORT, () => { console.log(`ABAP Proxy running on port ${PORT}`); });

.env配置文件

ABAP_URL=http://ip:port ABAP_USER=账号 ABAP_PASS=密码 PORT=3000 NODE_ENV=production

cd到项目目录

运行终端命令安装依赖

npm init -y && npm install dotenv express axios cors helmet morgan

依赖安装成功后生成的文件

终端命令启动代理服务

node node proxy-server.js

可以看到代理服务已经成功启动

3.启动前端页面可以看到正常调用ABAP后端服务,获取到数据

http://www.jsqmd.com/news/249761/

相关文章:

  • DeepSeek V4五大技术突破解析:大模型行业的新格局与新趋势
  • [毕设选题] 数据分析方向经典实用毕设选题汇总与参考 新颖方向 大全✅​
  • 手把手教你用8款AI论文生成器:一键极速搞定超长篇幅论文指南
  • 豆包/Kimi写论文后AI率太高?这几款工具一键搞定
  • Flink反压机制解析:如何应对数据处理瓶颈
  • VM安装后没有虚拟网卡
  • 严肃面试官与搞笑程序员的三轮大厂面试对决
  • Windows小工具,免费实用
  • SpeedAI vs 笔灵AI降重:哪个更适合毕业论文?优劣全分析
  • 手把手教你用豆包写论文后快速通过AIGC检测
  • 用豆包写论文的同学注意了!这4款降AI工具必须收藏
  • 免费vs付费降AI工具哪个香?7款横评告诉你答案
  • 2026年最值得入手的8款降AI神器,亲测第3款效果炸裂
  • 毕业季救急:24小时内把论文AI率降到合格线的实战教程
  • 干货:不完美的智慧,一个分词算法揭示的人类阅读之谜
  • 2026年最值得入手的8款降AI工具推荐,亲测第3款效果炸裂
  • 别再手动改论文了!2026年最省时的AI降重工具推荐
  • 研究生师兄私藏的4款降AI神器,低调好用不踩雷
  • 研究生师兄私藏的4款降AI神器,低调好用不踩雷
  • linux音频实现
  • ToDesk 8K画质360帧正式发布,2026超清远程时代已来
  • Debian12 源码编译 FreeSWITCH 1.10.12
  • 大模型量化技术原理分析
  • 网站被黑别慌!前端开发者自救指南(附排查清单+防御技巧)
  • Python 连接 MCP Server 全指南
  • AI系统安全加固方案:架构师如何保护AI系统的可恢复性
  • 强烈安利研究生必用TOP9 AI论文写作软件
  • 大模型如何重塑人才决策:从“拍脑袋用人“到“精准识人“的实战指南
  • 基于Copula函数的指数期权跨品种配对交易策略实现
  • 学长亲荐9个AI论文平台,专科生毕业论文轻松搞定!