-
Notifications
You must be signed in to change notification settings - Fork 2
/
articleGet.js
45 lines (43 loc) · 1.81 KB
/
articleGet.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
var mongoose = require('mongoose');
const Comment = require('../models/comment');
const Article = require('../models/article');
var { CastError } = mongoose.Error;
async function getCommentsFromArticle(id) {
const comments = await Comment.find({ article: id });
return comments.map(comment => ({
id: comment._id,
author: comment.author,
text: comment.text
}));
};
module.exports = async (req, res) => {
const fields = req.query.fields || ['title', 'description'];
try {
const articleFetched = await Article.findById(req.params.id);
if (articleFetched) {
let response = Object.assign(
{},
fields.includes('id') ? {title: articleFetched.id} : null,
fields.includes('createdAt') ? {createdAt: new Date(articleFetched.createdAt).toISOString() } : null,
fields.includes('updatedAt') ? {updatedAt: new Date(articleFetched.updatedAt).toISOString() } : null,
fields.includes('title') ? {title: articleFetched.title} : null,
fields.includes('description') ? {description: articleFetched.description} : null,
fields.includes('comments') ? {comments: await getCommentsFromArticle(req.params.id)} : null,
);
res.set('Last-Modified', articleFetched.updatedAt.toUTCString())
res.format({
'application/json': () => res.json(response),
'text/plain': () => res.send(`This is the text/plain representation of the article #${req.params.id}`),
});
} else {
res.sendStatus(404);
}
} catch (error) {
if (error instanceof CastError) {
res.sendStatus(400);
} else {
console.log(error);
res.sendStatus(500);
}
}
};