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

1.消费代码

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

javascript 复制代码
        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跨域问题

javascript 复制代码
// 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配置文件

javascript 复制代码
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后端服务,获取到数据

相关推荐
开开心心就好2 小时前
批量提取PDF中的图片,直接导出原图
前端·javascript·支持向量机·智能手机·pdf·html·启发式算法
默_笙6 小时前
🏛 给 AI 配一间办公室:Harness Engineering 六大模块与它的实现
前端·javascript
linux_cfan7 小时前
videojs v10 源代码系列解读:14 · 谓词守卫:在运行时安全地调用能力
前端·javascript·音视频
天若有情6739 小时前
【纯前端小工具】公历生日转农历,批量查询每年农历生日对应的公历日期(GitHub Pages在线直接用)
前端·javascript·github pages·农历转换·lunisolar·网页小工具
林语琛10 小时前
我写的 switch…break 被 Babel 偷偷吞了
前端·javascript·babel
liuchangng10 小时前
Jev 模型研究:从生成式大模型到决策式模型——System One、RLCD 校准与采用边界
java·javascript·人工智能·python·深度学习
我命由我1234512 小时前
CSS - CSS 媒体查询 orientation
前端·javascript·css·html·css3·html5·js
志尊宝14 小时前
Vue3 零基础每日笔记(048):嵌套路由与命名视图——后台管理系统布局雏形
前端·javascript·vue.js·笔记·html5
@tangguo12315 小时前
npm 和 yarn 配置说明
前端·javascript·npm·node.js·yarn
志尊宝15 小时前
Vue3 零基础每日笔记(052):路由常见坑一次排雷——404、刷新丢参数、部署白屏
前端·javascript·vue.js·笔记·html5