Я пытаюсь,
- Постоянно следите за каталогом файлов,
- Если какой-либо файл приходит на основе типа файла (выводится из имени файла), вызовите API GET для идентификатора / ключа
- POST данные с ключом в другом API.
- Переместить файл, из которого публикуются данные, в другой каталог
Я использовал Chokidar, пакеты запроса-обещания.
Проблема в том, что всякий раз, когда в каталог вставляется более одного файла, быстро вызываются API, таким образом, что даже до того, как данные первого файла будут зафиксированы, второй файл обрабатывается. Это приводит к проблеме при получении идентификатора из первого API. Оба файла теперь будут иметь Тот же ключ / ID . Пожалуйста, дайте мне знать, как это исправить, чтобы мы получали уникальные идентификаторы данных из каждого файла.
Вот мой код:
var chokidar = require('chokidar');
const fs = require('fs');
var rp = require('request-promise');
var globalpath = require('path');
console.log("path", globalpath.resolve(process.cwd(), './Data'));
var watcher = chokidar.watch(globalpath.resolve(process.cwd(), './Data/*.json'), {
ignored: /^\./,
persistent: true
});
watcher
.on('add', function (path) {
readfile(path);
});
async function readfile(path) {
fs.readFile(path, function (err, data) {
if (err != null) {
console.log(err);
}
var loadingdata = JSON.parse(data);
if (path.indexOf("PO") > -1) {
var options = {
method: 'GET',
uri: 'http://localhost:3005/GetNewPOKey',
json: true
};
rp(options)
.then(function (parsedBody) {
console.log(parsedBody.NextPOKey);
var options2 = {
method: 'POST',
uri: 'http://localhost:3005/createPO?id='+parsedBody.NextPOKey,
body: loadingdata,
json: true
};
rp(options2)
.then(function (parsedBody) {
console.log(parsedBody);
if (parsedBody === "OK") {
moveit(path);
}
// POST succeeded...
})
.catch(function (err) {
console.log("API error :" + err);
// POST failed...
});
// GET succeeded...
})
.catch(function (err) {
console.log("API error :" + err);
// GET failed...
});
}
else {
console.log("Unknown File" + path);
}
});
}
function moveit(mypath) {
// console.log("This file is posted " + path);
let oldpath = mypath;
let newpath = globalpath.resolve(process.cwd(), './History') + "/" + globalpath.basename(mypath.split('.').join('-' + Date.now() + '.'));
console.log("This is the new filename " + newpath);
fs.rename(oldpath, newpath, (err) => {
if (err) throw err;
console.log('Rename complete!');
});
}