Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialPedro Ferrari
14,295 PointsTypeError: undefined is not a function
Hi, I think I followed everything as Andrew did, but for some reason I am getting this error whenever I open the preview. The first page loads, then the error happens.
The error is: TypeError: undefined is not a function points to this: content = content.replace("{{" + key + "}}", values[key]);
Looks like it does not recognize the .replace method.
Here is my code:
var fs = require("fs");
function mergeValues(values, content) {
// cycle over the keys
for (var key in values) {
// replace all {{key}} with the values object
content = content.replace("{{" + key + "}}", values[key]);
}
//return merged content
return content;
}
// Function that handles the reading of files to the templates that we have and merge in values
// read from file and get a string
// merge values in to string
function view(templateName, values, response) {
// read from the template files
var fileContents = fs.readFileSync('./views/' + templateName + '.html', {enconding: "utf8"});
// Insert Values in to the content
fileContents = mergeValues(values, fileContents);
// Write out the contents to the response
response.write(fileContents);
}
module.exports.view = view;
I shared a workspace here, as it might be somewhere else. https://w.trhou.se/ylkhd1909r
does anybody know what is going on? Thank you! :)
4 Answers
josue exhume
20,981 Pointsyou guys are right, just add the tooString method:
content = content.toString().replace("{{"+ key +"}}", values[key]);
Pedro Ferrari
14,295 Pointshi rydavim
I just tested it to be sure, but did not work. I believe the function parameters are set inside the function. the replace method only works against strings, so it should be a string anyways. But again, I might have no idea what I am talking about, so don't take me too serious :)
Thank you either way!
Pedro Ferrari
14,295 PointsThank you josue exhume
That don't break the server, but the outcome is "[object Object][object Object][object Object]"
With the original code, the server actually loads the first page with the right code, then it breaks. Beats me!
josue exhume
20,981 Pointshmm thats weird. lol want me to post my js files for that course?
rydavim
18,814 Pointsrydavim
18,814 PointsI haven't completed the Node.js course yet, but it sounds like perhaps
content
is not astring
?