Я работаю над этим проектом уже три дня, и я почти дошел до того, что понимаю все, что я делаю, и почему значение выдает ошибку, но в этом коде:
function updateStats(){
const users = readFile('users','txt','UTF-8');
users.forEach((v) => {
console.info(v);
var user = v.toString();
const statFile = readFile(user,'txt','UTF-8');
readHTTP(v,currentChannel,statFile[0]);
});
}
Выдает ошибку:
I am doing my 15 minutes update
610636905440215071
677257430249242655
539899963568553986
525819952708583427
373982165307752460
Error: ENOENT: no such file or directory, open '/Users/codel/OneDrive/Documents/BattlEye/files/.txt'
at Object.openSync (fs.js:476:3)
at Object.readFileSync (fs.js:377:35)
at readFile (C:\Users\codel\OneDrive\Documents\BattlEye\index.js:98:25)
at C:\Users\codel\OneDrive\Documents\BattlEye\index.js:214:26
at Array.forEach (<anonymous>)
at updateStats (C:\Users\codel\OneDrive\Documents\BattlEye\index.js:211:11)
at Timeout._onTimeout (C:\Users\codel\OneDrive\Documents\BattlEye\index.js:27:3)
at listOnTimeout (internal/timers.js:554:17)
at processTimers (internal/timers.js:497:7) {
errno: -4058,
syscall: 'open',
code: 'ENOENT',
path: '/Users/codel/OneDrive/Documents/BattlEye/files/.txt'
}
C:\Users\codel\OneDrive\Documents\BattlEye\index.js:215
readHTTP(v,currentChannel,statFile[0]);
^
TypeError: Cannot read property '0' of undefined
at C:\Users\codel\OneDrive\Documents\BattlEye\index.js:215:43
at Array.forEach (<anonymous>)
at updateStats (C:\Users\codel\OneDrive\Documents\BattlEye\index.js:211:11)
at Timeout._onTimeout (C:\Users\codel\OneDrive\Documents\BattlEye\index.js:27:3)
at listOnTimeout (internal/timers.js:554:17)
at processTimers (internal/timers.js:497:7)
Я предполагаю, что это как-то связано со структурой функции, но другие мои циклы foreach отлично работают в этом синтаксисе. Может ли кто-нибудь помочь отладить это?
Редактировать: Прочитать файл:
function readFile(fileName,fileType,fileFormat){
try {
const data = fs.readFileSync('/Users/codel/OneDrive/Documents/BattlEye/files/'+fileName+'.'+fileType, fileFormat);
const lines = data.split(/\r?\n/);
return lines;
} catch (err) {
console.error(err);
}
}
Читатьhttp:
function readHTTP(user,cc,userID){
const puppeteer = require('puppeteer');
var url= 'https://r6.tracker.network/profile/pc/' + userID;
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
try {
await page.goto(url);
} catch(error){
cc.send('You did not enter a valid Ubisoft UserID');
}
const data = await page.evaluate(() => {
return Array.from(document.querySelectorAll('.trn-defstat__value'))
.map(item => item.innerText);
});
writeStatFile(user,userID,data);
console.info("Personal stats file was written");
})();
}
Я только что выучил этот язык два дня назад, но значение не проходит через цикл for each в последующую функцию.
@Ozgur Sar Я добавил правку с полным журналом. Он читает user.txt, но при поиске файла user.txt значение не отправляется. Полный журнал показывает, что console.info(v) выводит нужные мне значения.
Пожалуйста, выложите код readFile
(и, возможно, readHTTP
), без этого мы не сможем вам помочь.
Используйте отладчик и проверьте значение v
/user
. Моя ставка: ваш users.txt
заканчивается новой строкой, а последний v
— это пустая строка.
@ Берги, я думаю, ты прав. То, как я читаю файл, относится к разделению каждой строки. Ты был прав. Это было просто незахваченное пустое пространство.
Ах, мой хрустальный шар все еще работает :-) Кстати, вы также должны опустить catch (err) { console.error(err); }
. Это заставляет вашу функцию возвращать undefined
, с чем вызывающая сторона не хочет иметь дело. Не используйте try
/catch
в функции, если вы не можете обработать ошибку.
ошибка: -4058, системный вызов: «открыть», код: 'ЭНОЕНТ', путь: '/Users/codel/OneDrive/Documents/BattlEye/files/.txt' <-- Я думаю, что ошибка возникает из-за этого...
Хорошей причиной для поиска являются проблемы с асинхронностью.
попробуй это:
const promises = require('fs').promises
const updateStats = async () => {
try {
const users = await promises.readFile('users.txt', {encoding: 'utf8'});
for (let user of users.split("\n")) {
const statFile = await promises.readFile(user.toString() + '.txt', {encoding: 'utf8'});
if (statFile && statFile[0]) {
readHTTP(user,currentChannel,statFile[0]);
}
}
} catch(err) {
console.error(err.toString())
}
}
Не уверен, что это сработает, так как у меня не было времени проверить это.
Очень надеюсь, что это поможет :)
Почти полностью уверен, что у вас есть пустая новая строка в users.txt
Я бы сделал следующее:
function updateStats(){
const users = readFile('users','txt','UTF-8');
users.forEach((v) => {
if (v === '') return
console.info(v);
var user = v.toString();
const statFile = readFile(user,'txt','UTF-8');
readHTTP(v,currentChannel,statFile[0]);
});
}
Похоже, что он не может прочитать файл
users
, вы не можете запустить forEach() наusers
. Проверьте имя файла, который вы пытаетесь прочитать.