Я работаю над проектом для моего класса. Приложение облегчает пользователям обновление своих ПК. Приложение состоит из трех частей: интерфейсный сервер, сервер node.js и приложение (сканер) C#, которое пользователь загружает с сервера и запускает локально в пользовательском P C. После запуска сканера он извлекает существующие спецификации оборудования из пользовательского P C и отправляет его как объект json на сервер через HTTP-запрос. серверный API берет эту информацию и генерирует совместимый обновленный список деталей из нашей базы данных. Я изо всех сил пытаюсь найти способ вернуть эти сгенерированные API данные в интерфейс реакции, открытый на стороне пользователя.
API - это REST API
Я новичок в использовании node js и работе с HTTP-запросами. Будет полезно, если кто-нибудь сможет предоставить какое-либо решение, документацию или статью, которые могут быть полезны для реализации этой функциональности. также не стесняйтесь давать какие-либо предложения о том, как добиться этого соединения между тремя частями.
Вот код, где реагирует интерфейс, который отправляет запрос на scanner.exe
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();
})
}
Вот код API на стороне сервера, который обслуживает файл scanner.exe
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 сканера и передать их клиенту, с которого отправил запрос на загрузку
спасибо!