Замените имя родительского каталога на одно по моему выбору

#javascript #node.js

#javascript #node.js

Вопрос:

Я пытаюсь заменить родительскую папку пути именем по моему выбору.

 exports.uploadDirectory = async function(dir, customer) {
var fullPathArray = [];
var params = [];
// Read all folders, subfolder and files and add them to an array
fs.readdirSync(dir).forEach(file => {
 let fullPath = path.join(dir, file);
 if (fs.lstatSync(fullPath).isDirectory()) {
    exports.uploadDirectory(fullPath);
  } else {
            fullPathArray.push(fullPath);
  }  
 });
      // Loop through each file found and add it to the object params array
      fullPathArray.forEach(function(value){
      let init_value = value.split(//(. )/)[1]; // Removing old parent folder
      console.log(customer   '/'   init_value); // Thought this may work but returns the below
      params.push({ Bucket: config.S3.bucket, Key: init_value, Body: fs.createReadStream(value) });
 });

// More Stuff here
};
  

Печатает журнал консоли

 undefined/New Folder 2/test22.js
myCustomer/index.html
myCustomer/test.js
  

Как вы можете видеть, первый элемент, у которого есть подкаталог, возвращает undefined. Но файлы в родительском каталоге работают нормально.

Ожидаемый

 myCustomer/New Folder 2/test22.js
myCustomer/index.html
myCustomer/test.js
  

Редактировать

значение равно;

 New Folder/New Folder 2/test22.js
New Folder/index.html
New Folder/test.js
  

init_value — это;

   New Folder 2/test22.js
  index.html
  test.js
  

Вызов

 exports.handler = async (event) => {
await content.uploadDirectory("./New Folder", "myCustomer");
};
  

Комментарии:

1. не могли бы вы добавить подробную информацию о value консоли. зарегистрируйте его выше let init_value ?

2. @hgb123 только что добавлено выше.

3. Я воспроизвел в своем локальном и не вижу ничего плохого imgur.com/a/NFh0EPB

4. Ага. Это определение. помогает! У меня есть идея, что может быть не так. Я использую AWS Lambda для этого, и способ / где я вызываю функцию, может быть причиной этого. Я попробую что-нибудь и отправлю обновление.

5. Когда я объявляю и назначаю локальную переменную ‘customer’, как у вас, она работает нормально. Но когда я передаю его в качестве аргумента в функции, это не так. Странно.

Ответ №1:

Кажется, что проблема заключается здесь

 exports.uploadDirectory(fullPath)
  

Вы забыли вызвать его с помощью customer, это должно быть

 exports.uploadDirectory(fullPath, customer)