从给定的JavaScript框架里面选择一种,代写一个完整的相册分享网站。
Overview
In this assignment, we are going to develop a simple single-page social photo sharing application iAlbum using the MEAN stack (MongoDB, Express.JS, AngularJS, and Node.js).
The main work flow of iAlbum is as follows.
- Upon loading, the sketch of the page is shown in Fig. 1
- After a user has logged in, the sketch of the page is in Fig. 2. A list of friend albums is shown in the left division.
- After clicking “My Album”, the sketch of the page is in Fig. 3. The photos in the user’s own album is displayed in the right division, together with messages of who liked a photo, deletion buttons, and new photo selection/upload buttons.
- Each photo is clickable. After clicking a photo, the photo will be enlarged as in Fig. 4, together with the “liked” message and the deletion button. When the cross is clicked, the page returns to the view shown in Fig. 3.
- When a friend’s album is selected in the left-hand list, the page view becomes one in Fig. 5. Photos of the friend are shown in the right division, together with messages of who liked a photo and the like buttons.
- Similarly, when a photo is clicked, the photo will be enlarged as in Fig. 6, together with the “liked” message and the like button. When the cross is clicked, the page returns to the view shown in Fig. 5.
Preparations
Following steps in Lab 6, install the Node.js environment and the Express framework, create an Express project named iAlbum, add dependencies for MongoDB in package.json, and install dependencies.
Following steps in Lab 6, intall MongoDB, run MongoDB server, and create a database “assignment3” in the database server.
Insert a number of records to a userList collection in the database in the format as follows. We will assume that user names are all different in this application.
db.userList.insert({'username': 'Eddie', 'password': '123456', 'friends':['Ken', 'Alice', 'Bill']})
Create a folder “uploads” under the public folder in your project directory. Copy a few photos to the uploads folder (due to our simplified implementation to be outlined later, we will only use .jpg photo files in this assignment). Insert a few records to a photoList collection in the database in the format as follows, each corresponding to one photo you have copied to the uploads folder. Here userid should be the value of _id generated by MongoDB for the photo owner’s record in the userList collection, which you can find out using db.userList.find().
db.photoList.insert({'url': 'uploads/1.jpg', 'userid': 'xxxxxxx', 'likedby':['Ken', 'Alice']})
Note that copying photos to uploads folder and inserting photo records into the photoList collection, as we do above, are only for testing purpose. We will implement the functionality of uploading photos and inserting their records to the database using iAlbum.
For implementation simplicity, in this assignment, we do not store uploaded photos in MongoDB. Instead, we store them in the harddisk under the ./public/uploads/ folder, and store the path of a photo in the photoList collection only, using which we can identify the photo in the uploads folder.
Task 1. Implement server-side logic (app.js, ./routes/albums.js)
app.js
In app.js, load the router module implemented in ./routes/albums.js. Then add the middleware to specify that all requests will be handled by this router.
Add necessary code for loading the MongoDB database you have created, creating an instance of the database, and passing the database instance for usage of all middlewares.
Also load any other modules and add other middlewares which you may need to implement this application.
Add the middleware to serve requests for static files in the public folder.
We will let the server run on the default port 3000 and launch the Express app using command “npm start”.
./routes/albums.js
In albums.js, implement the router module with middlewares to handle the following endpoints:
- HTTP GET requests for /init
- HTTP POST requests for /login
- HTTP GET requests for /logout
- HTTP GET requests for /getalbum/userid
- HTTP POST request for /uploadphoto
- HTTP DELETE requests for /deletephoto/photoid
- HTTP PUT requests for /updatelike/photoid
Task 2 Implement the client-side code
Implement Index.html and myscripts.js as an AngularJS application.
index.html
Index.html should link to the external JavaScript file myscripts.js, directory ./public/javascripts/ and the stylesheet mystyles.css directory ./public/stylesheets/.
In index.html, include the HTML code for creating one header area contains “iAlbum” and two divisions to be displayed underneath the header area.
./public/javascripts/myscripts.js
In myscripts.js, implement the code which works together with index.html to achieve the following functionalities.
(Note: In implementing the page views, you can decide the HTML elements to use (unless specified), as long as the page views follow the sketches in Figures 1-6.)
- Page load
- Log in
- Log out
- Display an album
- Upload a photo
- Delete a photo
- Like a photo
- Display enlarged photo