the API handles resizing and serving stored images. Advanced Full-Stack Web Development Nanodegree Program From Udacity.
- a placeholder API: place images into your front end with the size set via URL parameters.
- a library: serve properly scaled versions of your images to the front end to reduce page load size.
- resize an image.
- list all images
- list all thumbnails
- read and write to your disk via a Node.js express server rather than a database.
- cache previously resized images
- the images are saved as webp and lazy-loaded
- the thumbnails are saved as webp and lazy-loaded
GET / # for going to the main page
GET /api # for testing the api endpoint
DELETE /api/clear # for clearng the cache
POST /api/resize # for resizing an image
GET /api/images/:id? # for serving images and rendering a list of images, if images exist, with error handling for invalid requests.
GET /api/thumbnails/:id? # for serving thumbnail images and rendering a list of thumbnails, if thumbnails exist, with error handling for invalid requests.
# install the dependencies
npm i
# run the project
npm run start:prod
# run the tests
npm run test
- @types/ejs: TypeScript typings for the EJS templating engine.
- @types/express: TypeScript typings for the Express web framework.
- @types/fluent-ffmpeg: TypeScript typings for the Fluent FFmpeg video processing library.
- @types/jasmine: TypeScript typings for the Jasmine testing framework.
- @types/morgan: TypeScript typings for the Morgan HTTP request logger middleware.
- @types/multer: TypeScript typings for the Multer middleware for handling file uploads.
- @types/node: TypeScript typings for the Node.js runtime environment.
- @types/sharp: TypeScript typings for the Sharp image processing library.
- @types/supertest: TypeScript typings for the Supertest HTTP testing library.
- @typescript-eslint/eslint-plugin and @typescript-eslint/parser: ESLint integration for TypeScript.
- ejs: EJS templating engine for rendering dynamic HTML pages.
- eslint, eslint-config-prettier, and eslint-plugin-prettier: code linting and formatting.
- jasmine and jasmine-spec-reporter: Jasmine testing framework and a reporter for displaying test results.
- nodemon: development tool that automatically restarts the server when changes are made to the code.
- prettier: code formatter.
- supertest: HTTP testing library.
- ts-node: TypeScript execution environment.
- typescript: TypeScript language compiler.
- @types/fs-extra: TypeScript typings for the fs-extra library, which provides additional functionality for the Node.js fs module.
- dotenv: module for loading environment variables from a .env file.
- express: Express web framework.
- express-validator: library for validating incoming HTTP requests in Express.
- fluent-ffmpeg: video processing library.
- fs-extra: library that provides additional functionality for the Node.js fs module.
- morgan: HTTP request logger middleware.
- multer: middleware for handling file uploads in Express.
- sharp: image processing library.
- Source code is kept separate from compiled code.
- All tests should be contained in their own folder.
- Separate modules are created for any processing.
- Package.json should contain both devDependencies, and dependencies.
- Scripts should be created for testing, linting/prettier, starting the server, and compiling TS.
- Build script should run without error.
- Start script should run without error
- Provided endpoint should open in the browser with status 200
- Accessing the provided URL with image information should successfully resize an image and save it to disk on first access, then pull from disk on subsequent access attempts.
- An error message should be provided to the user when an image has failed to process or does not exist.
- Test script runs and all tests created pass.
- There is at least 1 test per endpoint and at least one test for image processing.
- All code in the SRC folder should use the .ts filetype.
- Functions should include typed parameters and return types and not use the any type.
- Import and Export used for modules.
- Build script should successfully compile TS to JS.
- Prettier and Lint scripts should run without producing any error messages.
- Add additional processing to accept and output other image formats than JPG.
- Modify the thumbnail filename to include the image size to allow for multiple sizes of the same image.
- Further explore the options in the Sharp module and add additional processing options.
- Add in logging to record when images are processed or accessed.
- Create a front-end for uploading more images to the full-size directory.
- Create a front-end that displays a thumbnail directory.
- Create a front-end that allows for the selection of how to process a selected image.
- Make a logger middleware.
- Add endpoint tests & more tests to the app.
- Make images load faster.