Message mixer step 6 Cannot set properties of undefined

Hello everyone. I’m trying to do the message mixer project

https://www.codecademy.com/courses/learn-intermediate-javascript/projects/message-mixer-node

but I can’t get past step 6, this is the encryptors module code


// Declare and export the functions here.//
const caesarCipher = (str, amount = 0) => {
if (amount < 0) {
return caesarCipher(str, amount + 26);
}
let output = ‘’;
for (let i = 0; i < str.length; i++) {
let char = str[i];
if (char.match(/[a-z]/i)) {
let code = str.charCodeAt(i);
if (code >= 65 && code <= 90) {
char = String.fromCharCode(((code - 65 + amount) % 26) + 65);
} else if (code >= 97 && code <= 122) {
char = String.fromCharCode(((code - 97 + amount) % 26) + 97);
}
}
output += char;
}
return output;
};

const symbolCipher = (str) => {
const symbols = {
‘i’: ‘!’,
‘!’: ‘i’,
‘l’: ‘1’,
‘1’: ‘l’,
‘s’: ‘$’,
‘$’: ‘s’,
‘o’: ‘0’,
‘0’: ‘o’,
‘a’: ‘@’,
‘@’: ‘a’,
‘e’: ‘3’,
‘3’: ‘e’,
‘b’: ‘6’,
‘6’: ‘b’
}

let output = '';
for (let i = 0; i < str.length; i++) {
  let char = str.toLowerCase()[i];

  if (symbols[char]) {
    output += symbols[char]
  } else {
    output += char;
  }
}
return output;

}

const reverseCipher = (sentence) => {
let words = sentence.split(’ ‘);
for (let i = 0; i < words.length; i++) {
words[i] = words[i].split(’‘).reverse().join(’‘);
}
return words.join(’ ');
};

module.export.caesarCipher= caesarCipher;
module.export.symbolCipher= symbolCipher;
module.export.reverseCipher= reverseCipher;


this is the code of the message-mixer file

// Import the functions from encryptors.js here.//
const encryptors = require(‘./encryptors.js’)

const caesarCipher= encryptors.caesarCipher;
const symbolCipher= encryptors.symbolCipher;
const reverseCipher= encryptors.symbolCipher;

// User Input / Output Logic
/////////////////////////////////////////////

const encryptionMethod = getEncryptionMethod();
process.stdin.on(‘data’, (userInput) => {
displayEncryptedMessage(encryptionMethod, userInput);
});

/* Helper function for determining which cipher method
the user chose when they ran the program. */
function getEncryptionMethod() {
let encryptionMethod;

const encryptionType = process.argv[2];  
if (encryptionType === 'symbol') {
  encryptionMethod = symbolCipher;
} else if (encryptionType === 'reverse') {
  encryptionMethod = reverseCipher;
} else if (encryptionType === 'caesar') {
  let amount = Number(process.argv[3]);
  if (Number.isNaN(amount)) {
    process.stdout.write(`Try again with a valid amount argument. \n`)
    process.exit();  
  }
  encryptionMethod = (str) => caesarCipher(str, amount);
} 
else {
  process.stdout.write(`Try again with a valid encryption type. \n`)
  process.exit();
}

process.stdout.write('Enter the message you would like to encrypt...\n> ');
return encryptionMethod;

}

/* Helper function for displaying the encrypted message to the user. */
function displayEncryptedMessage(encryptionMethod, userInput) {
let str = userInput.toString().trim();
let output = encryptionMethod(str);
process.stdout.write(\nHere is your encrypted message:\n> ${output}\n)
process.exit();
}

and this is the bash error message after typing the command
“node message-mixer caesar 4”

C:\Users\Gianfranco\desktop\node\encryptors.js:62
module.export.caesarCipher= caesarCipher;
^
TypeError: Cannot set properties of undefined (setti
ng ‘caesarCipher’)

Can someone help me?
Thank you

Should that be module.exports instead of module.export ?

2 Likes

Thank you so much my distant friend
I have waded and looked at this code many times without noticing this bug
Thanks again