首页 > 解决方案 > 如何组合来自两个不同应用程序的请求从一个请求中获取数据并将其作为对另一个请求的响应发送?

问题描述

我正在为我的班级做一个项目。该应用程序方便用户升级他们的个人电脑。该应用程序由三个部分组成,一个反应前端、node.js 服务器和一个 C# 应用程序(扫描仪),用户从前端下载并在用户 PC 上本地运行它。扫描程序运行后,它会从用户的 PC 中提取现有的硬件规格,并通过 HTTP 请求将其作为 json 对象发送到服务器。服务器 API 获取此信息并从我们的数据库中生成兼容的升级部件列表。我正在努力寻找一种方法将此 API 生成的数据返回到在用户端打开的反应前端。

API 是一个 REST API

我是使用节点 js 和处理 HTTP 请求的新手。如果有人可以提供任何我可以帮助实现此功能的解决方案、文档或文章,那将会很有帮助。也可以随意就如何实现这三个部分之间的这种联系提出任何建议。

这是发送scanner.exe请求的react前端代码

  handleDownload = () =>{
    const scn_URL = "http://localhost:5000/fileApi?name=User_scanner.exe";
    Axios({
      method: 'GET',
      url: scn_URL,
      responseType: 'blob'
    })
    .then(response =>{
      console.log(response.data);
      const url = window.URL.createObjectURL(new Blob([response.data]));
      const link = document.createElement('a');
      link.href = url;
      link.setAttribute('download', 'scanner.exe');
      document.body.appendChild(link);
      link.click();
    })

  }

这是为scanner.exe文件提供服务的服务器端API代码

var express = require("express");
var router = express.Router();

router.get("/", function (req, res, next) {
    const fileName = req.query.name;
    const filepath = "C:\\Users\\Sakib_PC\\my files\\senior_Design\\Senior_DesignS19_group_5\\back-end-testing\\serverAPI\\public\\User_scanner.exe"
    console.log(`Got file name: ${fileName}`);
    res.set({'Content-Type':'application/octet-stream'})
    res.sendFile(filepath, function (err) {
        if (err) {
            next(err)
        } else {
            console.log('Sent:', fileName)
        }
    });

});

module.exports = router;

扫描仪将信息以 json 格式发送到服务器,并在下面的代码中命名为“data”

  private async void SendJson_Click(object sender, EventArgs e)
        {
            Console.WriteLine("send button was clicked");

            const string url = "http://localhost:5000/testApi";
            var data = new StringContent(this.jsonData, Encoding.UTF8, "application/json");
            string response;

            HttpClient client = new HttpClient();
            HttpResponseMessage res = await client.PostAsync(url, data);

            response = res.Content.ReadAsStringAsync().Result;
            Console.WriteLine(response);
            if (response == "message recieved")
            {
                Console.WriteLine(response);
                this.finishButton.Enabled = true;
            }
            else
            {
                Console.WriteLine("nothing ");
            }
        }

捕获此数据的 API 代码如下:

var express = require("express");
var router = express.Router();

router.post("/", function (req, res, next) {
    const msg = req.body;
    console.log(msg);
    const modMsg = "message recieved";

    res.send( modMsg);
})

module.exports = router;

服务器从扫描仪接收的数据在链接中给出,这是预期的。 扫描仪发送的 json 数据的图像 有什么方法可以将扫描仪数据发送到 api 捕获的前端,该前端首先发出下载请求。请记住,从网站发出的下载 GET 请求和从扫描仪发出的 POST 请求是两个不同的请求。我的目标是从扫描仪 POST 请求中获取数据并将其提供给发出下载请求的客户端

谢谢你!

标签: javascripthttpsserverclient-server

解决方案


推荐阅读