news 2026/3/18 12:13:30

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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后端服务,获取到数据

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 17:30:37

Java全栈工程师的面试实战:从基础到高阶的技术对话

Java全栈工程师的面试实战:从基础到高阶的技术对话 面试场景还原:技术与业务的深度融合 今天,我作为一位经验丰富的Java全栈开发工程师,正在参与一场针对互联网大厂的面试。这次面试的候选人是一位28岁的硕士毕业生,拥…

作者头像 李华
网站建设 2026/3/15 17:30:38

Kimi降AI vs 人工降重:效果、价格、速度三维度横向评测

Kimi降AI vs 人工降重:效果、价格、速度三维度横向评测 TL;DR:Kimi降AI效果有限,AIGC检测指数有时不降反升,因为AI改写依然带有明显的AI痕迹。人工降重效果稳定但耗时长、成本高。综合效果、价格、速度三个维度,专业降…

作者头像 李华
网站建设 2026/3/15 17:30:34

解析大数据领域数据目录的发展趋势

解析大数据领域数据目录的发展趋势:从"数据字典"到"智能管家"的进化之旅 关键词:数据目录、元数据管理、智能搜索、数据治理、云原生、多模态数据、隐私计算 摘要:在数据量以"天量"增长的今天,企业正面临"数据多到找不到,找到不敢用&q…

作者头像 李华
网站建设 2026/3/15 17:30:32

别再“等”生活:掌握主动幸福力

主动幸福力:在日常琐碎中构建你想要的生活你是在“生活”,还是在“等生活”?咱们先来聊个大实话。你有没有这种感觉?每天早上闹钟一响,大脑就开始像一台老旧的服务器一样加载任务:挤地铁、回邮件、开不完的…

作者头像 李华
网站建设 2026/3/15 17:30:35

linux清理缓存命令“echo 3 > /proc/sys/vm/drop_caches”

命令: echo 3 > /proc/sys/vm/drop_caches 是 Linux 系统中手动释放页缓存(Page Cache)的一种方式。下面详细解释其作用、原理和使用注意事项。 🔍 一、作用:清空内核的缓存(非应用程序内存)…

作者头像 李华
网站建设 2026/3/15 17:30:37

旧 Win7 转 Win11/10 文件传输难题?2 款实用工具快速搞定

很多朋友在将旧 Windows 7 电脑的数据迁移到 Win11/10 新机时,都会遇到一个尴尬问题:Win11/10 早已移除了 Windows 轻松传送功能,之前备份的大文件包没法直接用。其实不用慌,分享两款亲测好用的文件传输方案,不管是局域…

作者头像 李华