feat: 写了点后端

This commit is contained in:
539943419 committed 2025-01-13 14:26:24 +08:00
1 parent e2079c5388
commit 79cc9c34d6
20 files changed
+218 -19

No files matched your search

+2
View File
@@ -5,3 +5,5 @@ if [ -d ".output" ]; then
tar -czvf ./output.tar.gz .output
mv output.tar.gz .output/output.tar.gz
fi
echo "You can preview this build using node .output/server/index.mjs"
+4 -1
View File
@@ -38,7 +38,10 @@ const navList: NavItem[] = [
{
title: '文章',
path: '/posts',
otherPath: ['/post']
},
{
title: '后台',
path: '/user',
},
// {
// title: '测试',
+50
View File
@@ -0,0 +1,50 @@
import { defineStore } from "pinia";
export const useUserStore = defineStore("user", () => {
const isLogin = ref<boolean>(false);
const _token = ref<string>();
const _tokenExpireTime = ref<number>();
const tokenExpireTime = computed(() => {
if (_tokenExpireTime.value) {
return _tokenExpireTime.value;
}
const res = parseInt(localStorage.getItem("miao-token-expire-time") || "0")
_tokenExpireTime.value = res;
return res;
});
const setTokenExpireTime = (value: number) => {
_tokenExpireTime.value = value;
localStorage.setItem("miao-token-expire-time", value.toString());
};
const token = computed(() => {
if (_token.value) {
return _token.value;
}
const res = localStorage.getItem("miao-token") || ""
_token.value = res;
return res;
});
const setLoginStatus = (value: boolean) => {
isLogin.value = value;
};
const setToken = (value: string) => {
_token.value = value;
localStorage.setItem("miao-token", value);
};
return {
isLogin,
setLoginStatus,
token,
setToken,
tokenExpireTime,
setTokenExpireTime,
_tokenExpireTime,
_token
};
});
export default useUserStore;
+1 -14
View File
@@ -8,7 +8,6 @@ export default defineNuxtConfig({
devtools: { enabled: false },
alias: {
"@": "/"
// 'dayjs': 'dayjs/esm/'
},
app: {
pageTransition: {
@@ -18,14 +17,7 @@ export default defineNuxtConfig({
},
vite: {
server: {},
plugins: [
// AutoImport({
// resolvers: [ElementPlusResolver()],
// }),
// Components({
// resolvers: [ElementPlusResolver()],
// })
],
plugins: [],
test: {
deps: {
inline: ['element-plus']
@@ -34,11 +26,6 @@ export default defineNuxtConfig({
},
modules: ["@pinia/nuxt", '@element-plus/nuxt'],
compatibilityDate: "2025-01-12",
build: {
analyze: {
filename: "stats.html",
},
},
nitro: {
compressPublicAssets: true,
},
+1
View File
@@ -11,6 +11,7 @@
},
"dependencies": {
"@pinia/nuxt": "^0.9.0",
"@types/node": "^22.10.5",
"dayjs": "^1.11.13",
"markdown-it": "^14.1.0",
"node-fetch": "^3.3.2",
+2 -2
View File
@@ -1,5 +1,5 @@
<template>
<div class="post-wrapper">
<div class="user-wrapper">
<NuxtPage />
</div>
</template>
@@ -9,7 +9,7 @@
</script>
<style lang="scss" scoped>
.post-wrapper {
.user-wrapper {
display: flex;
flex-direction: column;
justify-content: center;
+21
View File
@@ -0,0 +1,21 @@
<template>
<div class="user-wrapper">
<NuxtPage />
</div>
</template>
<script setup lang="ts">
</script>
<style lang="scss" scoped>
.user-wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin: 0 auto;
max-width: 800px;
padding: 0;
}
</style>
+13
View File
@@ -0,0 +1,13 @@
<template>
<div>
index
</div>
</template>
<script setup lang="ts">
</script>
<style lang="scss" scoped>
</style>
+13
View File
@@ -0,0 +1,13 @@
<template>
<div>
login
</div>
</template>
<script setup lang="ts">
</script>
<style lang="scss" scoped>
</style>
+13
View File
@@ -0,0 +1,13 @@
<template>
<div>
用户主界面
</div>
</template>
<script setup lang="ts">
</script>
<style lang="scss" scoped>
</style>
+3
View File
@@ -11,6 +11,9 @@ importers:
'@pinia/nuxt':
specifier: ^0.9.0
version: 0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3)))(rollup@4.30.1)
'@types/node':
specifier: ^22.10.5
version: 22.10.5
dayjs:
specifier: ^1.11.13
version: 1.11.13
+4
View File
@@ -0,0 +1,4 @@
export default defineEventHandler(async (event) => {
const body = await readBody(event)
return
})
+3 -1
View File
@@ -1,7 +1,9 @@
import fs from 'fs';
import checkUserData from '~/server/utils/checkUserData';
export default defineEventHandler((event) => {
const res = fs.readdirSync('./')
checkUserData()
const res = fs.readdirSync('userData')
return {
res
}
+12
View File
@@ -0,0 +1,12 @@
import serverConfig from "../server.config"
const pathNeedAuth = serverConfig.auth.api
export default defineEventHandler((event) => {
// console.log('New request: ' + getRequestURL(event))
const path = getRequestURL(event).pathname
if(pathNeedAuth.has(path)){
// console.log('Auth needed')
return true
}
})
+4
View File
@@ -0,0 +1,4 @@
export default defineEventHandler((event) => {
checkUserData()
// console.log('New request: ' + getRequestURL(event))
})
+8
View File
@@ -0,0 +1,8 @@
export default {
auth: {
// 需要进行鉴权的api
api: new Set([
'/api/test/testDir'
])
}
}
+22
View File
@@ -0,0 +1,22 @@
import mkfileIfNotExist from "./mkfileIfNotExist"
let checked = false
/**
* 检查并完善userData的目录结构,若不存在密钥则生成随机的密钥
* @returns {void}
*/
const checkUserData = () => {
if (checked) return
checked = true
// console.log('check userData')
const dirList = [
'./userData/',
'./userData/db/',
'./userData/md/',
]
dirList.forEach(mkdirIfNotExist)
mkfileIfNotExist('./userData/key.txt', new Array(2048).fill(0).map(() => Math.floor(Math.random() * 16).toString(16)).join(''))
}
export default checkUserData
+15
View File
@@ -0,0 +1,15 @@
import fs from 'fs';
export default function mkdirIfNotExists(dir: string | string[]): void {
if (typeof dir !== 'string') {
dir.forEach((d) => mkdirIfNotExists(d));
return;
}
if (!fs.existsSync(dir)) {
try {
fs.mkdirSync(dir, { recursive: true });
} catch (error) {
console.error(error)
}
}
}
+25
View File
@@ -0,0 +1,25 @@
import fs from 'fs';
import path from 'path';
import mkdirIfNotExist from './mkdirIfNotExist';
export default function mkfileIfNotExist(filePath: string | string[], content?: string): void {
content = content || '';
if (Array.isArray(filePath)) {
filePath.forEach((file) => mkfileIfNotExist(file, content));
return;
}
if (typeof filePath !== 'string') {
console.error('Invalid file path:', filePath);
return;
}
if (fs.existsSync(filePath)) {
return;
}
const dir = path.dirname(filePath);
mkdirIfNotExist(dir);
try {
fs.writeFileSync(filePath, content);
} catch (error) {
console.error('Error creating file:', error);
}
}
+2 -1
View File
@@ -9,6 +9,7 @@
"style/**/*",
"utils/**/*",
".nuxt/*.d.ts",
"types/**/*"
"types/**/*",
"plugins/**/*",
]
}