Hello! I have difficulty passing tests 9-15, when compairing return from https://exercise-tracker.freecodecamp.rocks/ mine is the same, I’ve tryed looking at the console output as was suggested in this forum post, but i do not see any problem, would appreciate any help, thanks in advance
Code what i have written:
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const app = express();
const port = process.env.PORT || 3000;
app.use(cors())
app.use(express.static('public'))
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: "false" }));
app.use(bodyParser.json());
const mongoose = require('mongoose');
mongoose.set('strictQuery', true);
mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true });
var urlencodedParser = bodyParser.urlencoded({ extended: false })
const userSchema = new mongoose.Schema({
username: {
type: String,
required: true,
}
})
let userModel = mongoose.model("userModel", userSchema);
const exerciseSchema = new mongoose.Schema({
userId:{
type: String,
required: true,
},
description:{
type: String,
required: true,
},
duration: {
type: Number,
required: true,
min: 1,
},
date:{
type: Date,
default: Date.now,
}
})
let exerciseModel = mongoose.model("exerciseModel", exerciseSchema);
app.get('/', (req, res) => {
res.sendFile(__dirname + '/views/index.html')
});
app.post('/api/users',(req,res)=>{
console.log(req.body)
let username = req.body.username;
if(username == '' || username === undefined){
return res.json({error: "username must be provided"})
}
userModel.findOne({username: username}, function(err,data){
if(!err && data == null){
let newUser = new userModel({username:username})
newUser.save(function (err,response){
if(!err){
let savedusername = response.username;
let savedid = response['_id']
return res.json({username: savedusername, _id: savedid })
}
})
}
else{
return res.json({data})
}
})
})
app.get('/api/users', function (req, res) {
userModel.find({}, function (err, data) {
if (!err) {
return res.json(data);
}
});
});
app.post('/api/users/:_id/exercises', (request, response) => {
let input = request.params.input
let id = request.params['_id']
console.log('params', request.params)
console.log('id', id)
let description = request.body['description']
let duration = request.body['duration']
let input_date = request.body['date']
let username;
let date;
let checkdate = new Date(Date.parse(input_date)).toUTCString();
if(input_date == ''){
date = Date.now();
date = new Date(date).toUTCString();
}
else if (isNaN(duration)) {
return res.json({ error: 'duration is not a number' });
}
else if(checkdate === 'Invalid Date' && input_date != ''){
return response.json('Invalid Date')
}
else{
date = checkdate;
}
userModel.findOne({_id: id}, (error, result) => {
//console.log(result)
if(!error && result != undefined){
username = result.username;
console.log(username)
let newExercise = new exerciseModel({
userId: id,
date: date,
duration: duration,
description: description
})
newExercise.save(function (err,res){
if(!err){
return response.json({
username: username,
description: description,
duration: parseInt(duration),
date: new Date(date).toDateString(),
_id: id,
})
}
})
}else{
response.json('URL not Found')
}
})
})
app.all('/api/users/:_id/logs', function (req, res) {
let id = req.params['_id'];
userModel.findById(id, function (err, data) {
let username = '';
if(data === undefined){
return res.json({error: "wrong user id"})
}
else{
username = data.username;
}
if(!err && username != ''){
exerciseModel.find({userId: id}).sort({date: 'asc'}).exec(function (error, exercises) {
if(!error){
return res.json({
_id: id,
username: username,
count: exercises.length,
log: exercises.map(function (e){
return{
description: e.description,
duration: parseInt(e.duration),
date: new Date(e.date).toDateString()
}
})
});
}
});
}
});
});
app.use((req, res, next) => {
return next({ status: 404, message: 'not found' });
});
const listener = app.listen(process.env.PORT || 3000, () => {
console.log('Your app is listening on port ' + listener.address().port)
})