0

I'm new to APIs based on nodeJS and I would like to connect to an already existing collection in a MongoDB database. If I try to access http://localhost:8080/teams I get an error on the browser: Cannot GET /Teams. Not even the console.log get printed but nodemon (that I'm using to load after each save) shows no errors.

This is an example of the existing records:

use MYDB
db.TeamsCol.find()
{ "_id" : ObjectId("5d702df59ba60607dad06df4"), "teamID" : 1, "teamName" : "PT", "datetime" : "04-09-2019 10:21:16 Wednesday" }
{ "_id" : ObjectId("5d702ed59ba60607dad06df5"), "teamID" : 2, "teamName" : "ES", "datetime" : "01-09-2019 11:20:00 Sunday" }

I built the following struture:

project folder: API

API/server.js 
API/models/teamModel.js
API/Routes/teamRouter.js

as described below:

API/server.js file:

// Import express
let express = require('express');
// Import Body parser
let bodyParser = require('body-parser');
// Import Mongoose
let mongoose = require('mongoose');

// Initialise the app
let app = express();

// Setup server port
var port = process.env.PORT || 8080;

// Import routes
let apiRouter = require("./Routes/teamRouter");

// Connecting to the database
const db = mongoose.connect('mongodb://localhost/MYDB', {useNewUrlParser: true});

// setting body parser middleware 
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

// API routes
app.use('/Teams', apiRouter);

// Running the server
app.listen(port, () => {
console.log(`http://localhost:${port}`)
})

API/models/teamModel.js file:

// Import Mongoose
let mongoose = require('mongoose');

const Schema = mongoose.Schema;
const teamModel = new Schema({
    teamID: { type: Number   },
    teamName: { type: String },
    datetime: { type: String },
})

module.exports = mongoose.model('teamsModel', teamModel, 'TeamsCol');

API/Routes/teamRouter.js file:

// Import express
let express = require('express');
// Import Teams controller
var Team = require('../models/teamModel');

const teamRouter = express.Router();

teamRouter.route('/teams')
.get((req, res) => {
    Console.log(req)
    Team.find({}, (err, teams) => {
        res.json(teams)
    })  
})

// Middleware 
teamRouter.use('/:team', (req, res, next)=>{
Team.findById( req.params.team, (err,team)=>{
    if(err)
        res.status(500).send(err)
    else {
        req.team = team;
        next()
    }
})

})
teamRouter.route('/:team')
.get((req, res) => {
    res.json(req.team)
}) // end get Teams/:team 

// Export API routes
module.exports = teamRouter;

Here are the versions I'm using

mongo --version
MongoDB shell version v3.6.3

node --version
v8.9.4

and also the package.json contents:

{
"name": "teamsapi",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.19.0",
"express": "^4.17.1",
"mongoose": "^5.6.12"
}
}

Any ideas?

1 Answer 1

1

Because in your server.js file, you already used:

app.use('/Teams', apiRouter);

So the api /teams doesn't exist, it should be /Teams/teams. And the full url will be http://localhost:8080/Teams/teams.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.