Please note this was part of a coding bootcamp, I have not worked on the code since Oct 2018 and will instead leave it as it was when I was learning so that I can show progression in how far I have come since starting to code
A RESTful API made using MongoDB, Mongoose, Node.js and Express.js.
Northcoders News is a news aggregator which has articles divided by topic; each article has comments which can be added to or deleted by the user who posts them and votes which can be incrememented or decremented.
The API has been deployed by Heroku and can be found at https://nc-news33.herokuapp.com/ (Doesn't fully work, only shows page with endpoints)
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.
There are a few things you will need in order to install the API, these are listed below.
- A text editor e.g. VS Code, Sublime, Atom etc
- A Linux terminal e.g. Terminator
- npm package manager (comes with node.js) Installation instructions
- MongoDB v4.0 for the database Docs and information
- Postman for testing endpoints Download information
- Mongoose v5.0.14 Installation Instructions
- body-parser v1.15.2 Installation Instructions
- Node.js v8.1.0 Installation Instructions
- Express.js v4.16.3 Installation Instructions
- Mocha v5.0.5 Installation Instructions
- Chai v4.1.2 library Installation Instructions
- Nodemon v1.17.4 Installation Instructions
- Supertest v3.0.0 Installation Instructions
A step by step series of examples that tell you how to get a development env running
-
Fork this repository and clone it so you have your own local copy
-
cd into the folder you want to save the copy to e.g.
cd Documents/myprojects
and run the git clone command in your terminal
$ git clone https://github.com/HorrorOfPartyBeach/BE2-northcoders-news
- Run
cd BE2-northcoders-news
and thennpm install
- Install MongoDB, if you don't already have it installed, by running the following:
$ sudo apt -y install mongodb
- Open a new terminal window and run the command
mongod
, it should saywaiting for connections on port 27017...
at the bottom - you can run leave themongod
window running in the background.
- Open the folder in VS Code (or another editor) and install dependencies by running the following command:
$ npm install
- Make a config folder in the root folder and within that, a config.js file by running the commands below
$ mkdir config
$ touch config.js
- Use the below boilerplate config in your config.js
const NODE_ENV = process.env.NODE_ENV || 'development'
const config = {
development: {
DB_URL: 'mongodb://localhost:27017/nc_news'
},
test: {
DB_URL: 'mongodb://localhost:27017/nc_news_test'
}
};
module.exports = config[NODE_ENV];
You can seed the database by running npm run seed:dev
in your terminal.
To use endpoints, follow the steps below:
-
Ensure
mongod
is running in one terminal -
Run
npm run dev
in another terminal, it should state:[nodemon] 1.17.4 [nodemon] to restart at any time, enter `rs` [nodemon] watching: *.* [nodemon] starting `node index.js` listening on port 9090 mongodb://localhost:27017/nc_news
-
Open the Postman app and make a request as per the documentation; the request url will be
localhost:9090/
followed by an appropriate endpoint path e.g.localhost:9090/api/articles
.
Endpoint | Path |
---|---|
HTML page listing available endpoints | GET /api |
Get all the users | GET /api/users |
Get user by ID | GET /api/users/:username --- e.g: /api/users/mitch123 |
Get all topics | GET /api/topics |
Get all articles for a single topic | GET /api/topics/:topic_slug/articles --- e.g: /api/topics/football/articles |
Add a new article to a topic | POST /api/topics/:topic_slug/articles --- e.g: { "title": "new article", "body": "This is my new article content", "created_by": "user_id goes here"} |
Get all articles | GET /api/articles |
Get article by ID | GET /api/articles/:article_id --- e.g: /api/articles/5b9ba40c8ed29146542ab7a4 |
Get all comments for a single article | GET /api/articles/:article_id/comments --- e.g: /api/articles/5b9ba40c8ed29146542ab7a4/comments |
Add a new comment to an article | POST /api/articles/:article_id/comments --- e.g: {"body": "This is my new comment", "created_by": "user_id goes here"} |
Change the article votes - requires a vote up/down query | PATCH /api/articles/:article_id --- e.g: /api/articles/5b9ba40c8ed29146542ab7a4?vote=up |
Change the comment votes - requires a vote up/down query | PATCH /api/comments/:comment_id --- e.g: /api/comments/5b9ba40c8ed29146542ab7c8?vote=down |
Delete a comment | DELETE /api/comments/:comment_id |
To run the tests, ensure you have run the mongod
command in a separate terminal window and Mongo is connected on port 27017
. Then run npm run test
in a new window or the integrated terminal of your text editor.
The tests use Supertest, Mocha and the Chai library to test the happy and unhappy paths for the various available endpoints. Some examples can by found below:
- Test that the GET request returns an array of comments and a status 200 code
describe('/comments', () => {
it('GET returns an array of comments and 200 status code', () => {
return request.get('/api/comments')
.expect(200)
.then(res => {
expect(res.body.comments).to.have.length(comments.length);
})
})
})
- Test that a status 400 is returned if a required field is missing in a POST request
it('POST returns a 400 status and error message when a required field is missing', () => {
return request.post(`/api/topics/cats/articles`)
.send({
"title": "New title",
"body": "New article",
"belongs_to": "cats"
})
.expect(400)
.then(res => {
expect(res.body.msg).to.equal('articles validation failed: created_by: Path `created_by` is required.');
})
})
The API has been deployed by Heroku and can be found at https://nc-news33.herokuapp.com/
- MongoDB - NoSQL database program
- Mongoose - Object Data Modeling (ODM) library for MongoDB and Node.js
- Node.js - Javascript run-time environment
- Express.js - Web Application framework
- mLab - Database-as-a-service
- Heroku - Cloud Application Platform
Emma Gilmour - HorrorOfPartyBeach
This project is licensed under the MIT License - see the LICENSE.md file for details
- The great tutors and course at Northcoders
- A myriad of documentation