Я создаю Утилиту, где я выбираю данные для всех поставщиков из базы данных. Затем, используя [asyn c .eachLimit (data, 1, asyn c (obj, key) =>]), мы go переходим в раздел один за другим, где он переходит в данный раздел и далее.
Теперь для одного указанного c клиента мы запускаем утилиту следующим образом:
1). Получить данные. 2). Создать журнал транзакции ID. 3). Генерация случайного порядкового номера. 4). Отправка коллективных данных третьей стороне. 5). Получите данные в ответ, где мы также получим ссылку для скачивания в формате PDF. 6). Мы обновляем базу данных с помощью Response и помечаем как «Y».
7). Теперь на этом этапе начните выпуск, где мы должны преобразовать эту URL-ссылку PDF в base64 и сохранить ее в нашей базе данных.
Я перепробовал много готовых пакетов, которые либо загружают PDF, либо могут напрямую преобразовать его в base64.
Я работаю под управлением прокси-сервера в организации.
Когда я передаю ссылку, полученную в ответ от третьей стороны, она не может загрузить PDF. Но когда я пытаюсь дать абсолютный URL-адрес ссылки и передать его, он работает для одного PDF, но для другого l oop, он генерирует поврежденный PDF размером 1 КБ.
Вот код, который я использовал для справки:
1) Индекс. js
const { logger } = require('./utilities');
const async = require('async');
var loggerString = ` [${__filename}]`;
const getDataFromDb = require('./mySQLCalls/getDataFromDbMaster');
const generateLogTxnId = require('./utilities/generateLogTxnId');
const updateDataforBank = require('./mySQLCalls/updateDataForBank');
const generatePDFbase64 = require('./mySQLCalls/generatePDFbase64');
const sendDataToBank = require('./thirdPartyApiCalls/sendDataToBank');
const randomSeq = require('./mySQLCalls/getRandomSequence');
getDataFromDb()
.then(data => {
console.log("I am in data check----------->");
if(data.length > 0) {
console.log("I have data");
return utilDataPushFunction(data);
} else {
logger.info("No Data Found");
process.exit();
}
})
.then(res => {
logger.info(res);
process.exit();
})
.catch(err => {
logger.error(`${loggerString} ${err}`);
process.exit();
})
function utilDataPushFunction(data){
logger.info(`${loggerString} length of the request > ${data}`);
return new Promise((resolve, reject) => {
async.eachLimit(data, 1, async (obj, key) => {
try {
if(obj.requiredName=='XYZ bank') {
let logTxnId = await generateLogTxnId();
let randomSeqNo = await randomSeq(logTxnId);
let bankObj = await sendDataToBank(obj,logTxnId,randomSeqNo);
let updateDataforBankObj = await updateDataforBank(obj,bankObj,logTxnId);
let generatePDFbase64Obj = await generatePDFbase64(obj,bankObj,logTxnId);
//let updatePDFbase64Obj = await updatePDFbase64(generatePDFbase64Obj,logTxnId);
}
else {
logger.info(`${loggerString} No matching partner record found for > ${obj}`);
return Promise.resolve();
}
return Promise.resolve();
}
catch (error) {
logger.error(error);
return Promise.reject(error);
}
}, error => {
console.log("after execution ");
if(error){
console.log(error);
}
return resolve("successful");
})
})
}
2). sendDataToBank. js
Нет необходимости предоставлять больше данных, так как он работает хорошо, и мы разрешаем ответ следующим образом.
return resolve({
status: "Success",
abc: decryptObj[0],
thankUPageUrl: decryptObj[1],
downloadPDFUrl: decryptObj[2],
customerId: decryptObj[3],
pdfMIFDownloadUrl: decryptObj[4],
premiumPayable: body.metaData.premiumPayable
});
3). updateDataforBank. js
const pool = require('./connectionPool').getPool();
const logger = require('../utilities');
const query = { My Table Update -----> };
module.exports = (record, updateData, logTxnId) => {
var loggerString = `[${__filename}] [${logTxnId}]`;
return new Promise((resolve, reject) => {
if (updateData.status == 'Success') {
pool.query(query[updateData.status], [updateData.status,JSON.stringify(updateData),updateData.abc,updateData.customerId,record.id], (err, results, fields) => {
if (err) {
logger.error(`${loggerString} Error occured in retrieving data :${err}`);
return resolve();
}
console.log('PDF URL ---------------> '+ updateData.downloadPDFUrl);
return resolve(results);
})
} else if (updateData.status == 'Failure') {
pool.query(query[updateData.status], [updateData.status, JSON.stringify(updateData), record.id], (err, results, fields) => {
if (err) {
logger.error(`${loggerString} Error occured in retrieving data :${err}`);
return resolve();
}
logger.info(`Data Inserted successfully for Error`);
console.log("Data Inserted successfully======>", results);
return resolve(results);
})
}
})
}
4). generatePDFbase64. js
const axios = require('axios-https-proxy-fix');
const Fs = require("fs");
const proxy = {
host: 'proxyServerHostName',
port: 8080,
auth: {
username: 'UserID',
password: 'p@$$w0rD'
}
};
const { logger } = require('../utilities');
const async = require('async');
module.exports = (record,updateData, logTxnId) => {
var pdfsourcepath = 'C:/Users/XXXXXX/Desktop/BANK/somePDF_'+logTxnId+'.pdf';
var loggerString = `[${__filename}] [${logTxnId}]`;
logger.debug(`${loggerString} Inside Update - Logger ${updateData}`);
return new Promise((resolve, reject) => {
if (updateData.status == 'Success') {
downloadPDF(updateData.downloadPDFUrl,logTxnId);
async function downloadPDF(pdfURL,logTxnId) {
var url = pdfURL;
var path = pdfsourcepath;
var writer = Fs.createWriteStream(path);
var response = await axios({
url,
method: 'GET',
responseType: 'stream',
proxy,
})
response.data.pipe(writer);
return resolve();
}
}
else if(updateData.status == 'Failure') {
return resolve();
}
})
}
Моя основная цель - сначала сгенерировать pdf, а затем преобразовать его в base64, используя "pdf-to-base64". Поэтому я не упомянул шаг base64, так как я не могу получить весь PDF.
, когда я запускаю его независимо, он загружается и генерируется для одного, когда я внедряю его в этот код утилиты и запускаю его. Не получается.
Если у кого-то есть другие идеи, пожалуйста, дайте мне тоже.