You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
featuredImageAlt: A p5.js logo with musical notes above it has arrows labeled with HTTP methods pointing to a cloud labeled “Internet”. Above the cloud is an icon that reads “http\://”. Arrows point from the cloud to a pink cube labeled “Web Server” with the Node.js logo above it.
8
8
relatedContent:
9
9
references:
10
-
- en/p5/preload
10
+
- en/p5/async_await
11
11
- en/p5/loadjson
12
12
authors:
13
13
- Layla Quiñones
14
14
- Nick McIntyre
15
15
---
16
16
17
-
In this guide, we'll explore the fusion of p5.js and [Node.js](http://node.js) to create dynamic applications that save and retrieve user-generated drawings, animations, and sound projects! For example, you can create a [Simple Melody App](/tutorials/simple-melody-app/) where you save files with melodies you create by interacting with the canvas! Node.js allows you to easily save, replay, and edit these files right from your browser!
17
+
In this guide, we'll explore the fusion of p5.js and [Node.js](http://nodejs.org) to create dynamic applications that save and retrieve user-generated drawings, animations, and sound projects! For example, you can create a [Simple Melody App](/tutorials/simple-melody-app/) where you save files with melodies you create by interacting with the canvas! Node.js allows you to easily save, replay, and edit these files right from your browser!
18
18
19
19
20
20

@@ -175,37 +175,31 @@ let fs = require('fs');
175
175
176
176
// API endpoint to get list of songs
177
177
app.get('/songs', (req, res) => {
178
-
fs.readdir('songs', (err, files) => {
179
-
if (err) {
180
-
res.status(500).send('Error reading song files');
181
-
} else {
182
-
res.json({ files });
183
-
}
184
-
});
178
+
fs.readdir('songs', (err, files) => {
179
+
if (err) {
180
+
res.status(500).send('Error reading song files');
181
+
} else {
182
+
res.json({ files });
183
+
}
184
+
});
185
185
});
186
186
```
187
187
188
188
The code above initializes the [file system module (`fs`)](https://nodejs.org/api/fs.html), which provides APIs that help users interact with file systems on their computers. It also uses the `app.get()` method, which handles GET HTTP requests to the `/songs` URL. Here you use the file system module to read filenames from the folder, parse them as a JSON object, and send them in the response to the GET request.
189
189
190
190
Now that you have instructed the GET request on how to read the songs folder filenames, we can upload filenames as a JSON object in `sketch.js`.
191
191
192
-
- Use `preload()` and `loadJSON()` to load files from the songs folder in a global variable named `songs`. Visit the [p5.js reference](/reference) to learn more about [`preload()`](/reference/p5/preload) and [`loadJSON()`](/reference/p5/loadJSON).
193
-
- Use `console.log(songs)` in `setup()` to print the contents of the JSON array.
192
+
**Note:** In p5.js 2.x, the `preload()` function and synchronous loading methods have been removed. Instead, you should use `async`/`await` and the browser's `fetch` API to load data before using it in your sketch. Here is how you can update your `sketch.js`:
194
193
195
-
Your sketch.js file should look like this:
196
194
197
195
```js
198
-
//variable for JSON object with file names
199
196
let songs;
200
197
201
-
function preload() {
202
-
//load and save the songs folder as JSON
203
-
songs = loadJSON("/songs");
204
-
}
205
-
206
-
function setup() {
207
-
createCanvas(400, 400);
208
-
console.log(songs)
198
+
asyncfunctionsetup() {
199
+
createCanvas(400, 400);
200
+
// Fetch the list of songs from the server via loadJSON
201
+
songs =awaitloadJSON('/songs');
202
+
console.log(songs);
209
203
}
210
204
211
205
functiondraw() {
@@ -216,13 +210,11 @@ function draw() {
216
210
View your browser’s console to make sure the output of the `songs` variable looks something like this:
217
211
218
212
```
219
-
Object i
220
-
files: Array(3)
221
-
0: "C Major Scale.json"
222
-
1: "Frere Jacques.json"
223
-
2: "Mary's Lamb.json"
224
-
length: 3
225
-
// ...prototype
213
+
{ files: [
214
+
"C Major Scale.json",
215
+
"Frere Jacques.json",
216
+
"Mary's Lamb.json"
217
+
] }
226
218
```
227
219
228
220
Now you are ready to build the [Melody App](https://docs.google.com/document/u/0/d/1mzJv-7qU1_CmkWI0ZFeqf3CeBfpOOVIrvPRZtxqFxRI/edit)! You can access completed code for this guide in [this Github repository](https://github.com/MsQCompSci/melodyAppNodeStarter/tree/main).
0 commit comments