Tell us what’s happening:
Describe your issue in detail here.
Hi. I’ve completed the issue tracker project and it seems to be functional like the example page. Problem is with the GET tests - get request work fine, but during the tests i repeatedly get the test timed out error, which doesn’t give more info in the console, so it’s hard to track down the issue. All other tests passes.
Your code so far
‘use strict’;
const mongoose = require(“mongoose”);
const ObjectId = mongoose.Types.ObjectId;
const IssueRecord = require(’…/schemes’).IssueRecord;
const Projects = require(’…/schemes’).Projects;
module.exports = function (app) {
app.route(’/api/issues/:project’)
.get(function (req, res){
let project = req.params.project;
let {
issue_title,
issue_text,
created_by,
assigned_to,
status_text,
open,
_id
} = req.query;
if(open=='true'){
open = true;
} else if (open == 'false') {
open = false;
}
//try{
Projects.aggregate([
{ $match: {‘name’:project}},
{ $unwind: “$issues”},
_id != undefined
? { $match: {‘issues._id’:ObjectId(_id)}}
: { $match: {}},
issue_title != undefined
? { $match: {‘issues.issue_title’:issue_title}}
: { $match: {}},
issue_text != undefined
? { $match: {‘issues.issue_text’:issue_text}}
: { $match: {}},
created_by != undefined
? { $match: {‘issues.created_by’:created_by}}
: { $match: {}},
assigned_to != undefined
? { $match: {‘issues.assigned_to’:assigned_to}}
: { $match: {}},
status_text != undefined
? { $match: {‘issues.status_text’:status_text}}
: { $match: {}},
open != undefined
? { $match: {‘issues.open’:open}}
: { $match: {}}
]).exec((err,data) => {
if(!data||err){
console.log(err)
res.json();
// return;
}
else{
let mappedData = data.map(issue=>issue.issues);
res.json(mappedData);
}
})
/* } catch {
res.send();
console.log(‘err’)
}
*/
})
.post(async function (req, res){
try{
if(!req.body.issue_title || !req.body.issue_text || !req.body.created_by) {
res.json({ error: 'required field(s) missing' })
return;
}
let project = req.params.project;
let date = new Date().toISOString();
let project1 = await Projects.findOne({ name :project });
if (!project1) {
let project1 = new Projects({name:project});
await project1.save();
}
let newIssue = new IssueRecord(
{
issue_title: req.body.issue_title,
issue_text: req.body.issue_text,
created_on: date,
updated_on: date,
created_by: req.body.created_by,
assigned_to: req.body.assigned_to,
open: req.body.open,
status_text: req.body.status_text
}
)
project1.issues.push(newIssue);
await project1.save();
res.json({
assigned_to: newIssue.assigned_to,
status_text: newIssue.status_text,
open: newIssue.open,
_id: newIssue._id,
issue_title: newIssue.issue_title,
issue_text: newIssue.issue_text,
created_by: newIssue.created_by,
created_on: date,
updated_on: date
})
} catch {
console.log('ooops, something went wrong ')
}
})
////********************************************
.put(async function (req, res){
let project = req.params.project;
let _id = req.body._id;
if(!_id){
res.json({ error: 'missing _id' })
return;
}
const {
issue_title,
issue_text,
created_by,
assigned_to,
status_text,
open
} = req.body;
if(!issue_title &&
!issue_text &&
!created_by &&
!assigned_to &&
!status_text &&
!open){
res.json({ error: 'no update field(s) sent', _id: _id })
return;
}
try {
let project1 = await Projects.findOne({ name : project});
if(!project1){
res.json({ error: ‘could not update’, _id: _id })
return;
}
let issueData = project1.issues.id(_id);
if(!issueData){
res.json({ error: ‘could not update’, _id: _id });
return;
}
issueData.issue_title = issue_title||issueData.issue_title;
issueData.issue_text = issue_text||issueData.issue_text;
issueData.created_by = created_by||issueData.created_by;
issueData.assigned_to = assigned_to||issueData.assigned_to;
issueData.status_text = status_text||issueData.status_text;
issueData.open = open||issueData.open;
issueData.updated_on = new Date().toISOString();
await project1.save()
res.json({ result: ‘successfully updated’, _id: _id })
} catch {
res.json({ error: 'could not update', _id: _id })
}
})
//*****************************************
.delete(async function (req, res){
let project = req.params.project;
let _id = req.body._id;
if (!_id){
res.json({error: 'missing _id'});
return;
}
try {
let data = await Projects.findOne({name:project})
if(!data){
res.json({ error: ‘could not delete’, _id: _id })
return;
}
let issueData = data.issues.id(_id)
if(!issueData){
res.json({ error: ‘could not delete’, _id: _id })
return;
}
issueData.remove();
await data.save();
res.json({ result: ‘successfully deleted’, _id: _id })
} catch {
res.json({ error: ‘could not delete’, _id: _id })
}
})
};
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0
Challenge: Issue Tracker
Link to the challenge: