howfeed/src/routes/a/[slug].json.js
2020-06-24 10:52:01 -07:00

75 lines
2.1 KiB
JavaScript

import Article from '../../models/article.js';
export async function get(req, res, next) {
// the `slug` parameter is available because
// this file is called [slug].json.js
const { slug } = req.params;
const article = await Article.findOne({ slug }).populate({
path: 'author',
select: 'realname'
}).populate({
path: 'category'
}).populate({
path: 'comments.author_user',
select: 'realname'
});
if (article) {
article.set({ views: article.views + 1 });
article.save();
res.writeHead(200, {
'Content-Type': 'application/json'
});
res.end(JSON.stringify(article));
} else {
res.writeHead(404, {
'Content-Type': 'application/json'
});
res.end(JSON.stringify({
message: `Not found`
}));
}
}
export async function del(req, res, next) {
if (!req.user) {
res.writeHead(401, {
'Content-Type': 'application/json'
});
res.end(JSON.stringify({
message: `You are not logged in`
}));
return;
}
if (!req.user.author) {
res.writeHead(401, {
'Content-Type': 'application/json'
});
res.end(JSON.stringify({
message: `You are not designated as an author.`
}));
return;
}
const { slug } = req.params;
const article = await Article.findOneAndDelete({ slug });
if (article) {
const articles = await Article.find()
.sort({ created_at: 'desc' })
.populate({ path: 'category' })
.populate({ path: 'author', select: 'realname' });
res.writeHead(200, {
'Content-Type': 'application/json'
});
res.end(JSON.stringify({ category: 'all', articles }));
} else {
res.writeHead(404, {
'Content-Type': 'application/json'
});
res.end(JSON.stringify({
message: `Not found`
}));
}
}