Files

61 lines
1.9 KiB
TypeScript

// miaoBlog/server/api/posts/deletePost.ts
import DB from 'better-sqlite3';
import cacheResult from '~/server/utils/cacheRes';
function prepareDB() {
const db = new DB('./userData/db/posts.db');
const deletePostStmt = db.prepare('DELETE FROM posts WHERE id = ?');
const deleteContentStmt = db.prepare('DELETE FROM postContent WHERE id = ?');
const getTagIdStmt = db.prepare('SELECT tag_id FROM posts WHERE id = ?');
const deleteTagsStmt = db.prepare('DELETE FROM tags WHERE id = ?');
return { db, deletePostStmt, deleteContentStmt, getTagIdStmt, deleteTagsStmt };
}
export default defineEventHandler(async (event) => {
const { db, deletePostStmt, deleteContentStmt, getTagIdStmt, deleteTagsStmt } = cacheResult(prepareDB)();
const body = await readBody(event);
const { id } = body;
// 检查是否提供了有效的id
if (!id || isNaN(Number(id))) {
db.close();
return {
code: 400,
msg: '无效的id'
};
}
try {
// 开启事务
db.transaction(() => {
// 先从posts表中删除文章记录
deletePostStmt.run(Number(id));
// 再从postContent表中删除文章内容记录
deleteContentStmt.run(Number(id));
// 查找该文章对应的tag_id
const tagRow: any = getTagIdStmt.get(Number(id));
if (tagRow && tagRow.tag_id) {
// 如果存在tag_id,从tags表中删除对应的标签记录
deleteTagsStmt.run(tagRow.tag_id);
}
})();
db.close();
return {
code: 200,
msg: '删除成功'
};
} catch (error) {
console.error('删除数据时出错:', error);
db.close();
return {
code: 500,
msg: '服务器内部错误'
};
}
});