news 2026/5/1 19:08:07

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/5/1 16:19:05

严肃面试官与搞笑程序员的三轮大厂面试对决

严肃面试官与搞笑程序员的三轮大厂面试对决 第一轮 面试官: 谢飞机,我们先从基础问题开始吧。请说说 HashMap 的工作原理? 谢飞机: 啊,这个简单!HashMap 的工作原理就是用一个哈希值找到数组的位置&#xf…

作者头像 李华
网站建设 2026/5/1 8:27:30

ToDesk 8K画质360帧正式发布,2026超清远程时代已来

在数字化与远程协作日益普及的今天,远程控制软件已不再仅仅是技术工具,更成为连接人与人、人与设备的重要桥梁。然而,什么样的远程控制才算真正“好用”?是出众的连接速度,是清晰的远程画面,还是流畅无延迟…

作者头像 李华
网站建设 2026/4/22 13:08:05

AI率从95%降到8%!这3款冷门工具比大牌还好用

title: “AI率从95%降到8%!这3款冷门工具比大牌还好用” slug: “ai-rate-95-to-8-three-hidden-gem-tools” date: 2026-01-15 author: “小众工具发现者” tags: [“AI率95降到8”, “冷门降AI工具”, “小众降AI神器”, “降AI率效果好”, “论文AI率95%”] cate…

作者头像 李华
网站建设 2026/4/30 19:45:50

VIX期货基差异常下的指数期权波动率互换套利策略实现

""" 功能:基于VIX期货基差异常的波动率互换套利系统 作用:通过监测VIX期货与现货溢价异常,构建Cboe VXST与VIX跨期价差组合,捕捉S&P 500指数期权隐含波动率与实际波动率的预期偏差 风险:1. 基差收敛…

作者头像 李华
网站建设 2026/4/23 12:53:54

大模型量化技术原理分析

一、什么是大模型量化? 我们先从最核心的定义入手。大模型的权重、激活值在训练和推理过程中,默认采用高精度浮点数存储和计算,比如FP32(32位浮点数)、FP16(16位浮点数)。这些高精度数据能保证模…

作者头像 李华
网站建设 2026/4/22 3:46:25

Google Ads谷歌广告账户被封广告被拒:解封与规避全攻略

账户被拒不仅仅是广告被暂停,更意味着账户整体信任度下降、审核门槛提高、广告效果和投放策略都会受到影响。本文将带你从根源分析账户被拒的原因,逐步讲解如何快速解封、秒过审核,同时提供长期防护策略,帮助你的广告账户重回稳定…

作者头像 李华