Skip to content

Commit 5133efa

Browse files
许君山许君山
authored andcommitted
fix: resolve multiple bugs including error display, input clearing, CORS config, verb data and stream buffer handling
1 parent 9bd8e74 commit 5133efa

6 files changed

Lines changed: 48 additions & 90 deletions

File tree

backend/common-verbs.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
{"kanji": "帰る", "kana": "かえる", "romaji": "kaeru", "meaning": "回家 (return)"},
1919
{"kanji": "分かる", "kana": "わかる", "romaji": "wakaru", "meaning": "懂 (understand)"},
2020
{"kanji": "走る", "kana": "はしる", "romaji": "hashiru", "meaning": "跑 (run)"},
21-
{"kanji": "歩く", "kana": "あるく", "romaji": "aruku", "meaning": " (walk)"},
21+
{"kanji": "歩く", "kana": "あるく", "romaji": "aruku", "meaning": "行走 (walk)"},
2222
{"kanji": "泳ぐ", "kana": "およぐ", "romaji": "oyogu", "meaning": "游泳 (swim)"},
2323
{"kanji": "遊ぶ", "kana": "あそぶ", "romaji": "asobu", "meaning": "玩 (play)"},
2424
{"kanji": "休む", "kana": "やすむ", "romaji": "yasumu", "meaning": "休息 (rest)"},
@@ -71,7 +71,6 @@
7171
{"kanji": "入れる", "kana": "いれる", "romaji": "ireru", "meaning": "放入 (put in)"},
7272
{"kanji": "置く", "kana": "おく", "romaji": "oku", "meaning": "放置 (put)"},
7373
{"kanji": "住む", "kana": "すむ", "romaji": "sumu", "meaning": "居住 (live)"},
74-
{"kanji": "働く", "kana": "はたらく", "romaji": "hataraku", "meaning": "工作 (work)"},
7574
{"kanji": "手伝う", "kana": "てつだう", "romaji": "tetsudau", "meaning": "帮忙 (help)"},
7675
{"kanji": "頑張る", "kana": "がんばる", "romaji": "ganbaru", "meaning": "加油 (do one's best)"},
7776
{"kanji": "疲れる", "kana": "つかれる", "romaji": "tsukareru", "meaning": "累 (get tired)"},

backend/package-lock.json

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"cors": "^2.8.5",
1313
"express": "^4.18.2",
1414
"kuromoji": "^0.1.2",
15+
"ollama": "^0.6.3",
1516
"wanakana": "^5.3.1"
1617
}
1718
}

backend/server.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,11 @@ const app = express();
6666
const PORT = process.env.PORT || 3000;
6767

6868
// 中间件
69-
app.use(cors());
69+
app.use(cors({
70+
origin: process.env.CORS_ORIGIN || '*',
71+
methods: ['GET', 'POST'],
72+
allowedHeaders: ['Content-Type']
73+
}));
7074
app.use(express.json());
7175

7276
let tokenizer = null;
@@ -111,7 +115,7 @@ function detectVerbType(verb) {
111115
return null;
112116
}
113117
// 还需要检查提取出的动词是否是一个完整的字典形(基本形)
114-
if (verbToken.conjugated_form !== '基本形') {
118+
if (verbToken.conjugated_form && verbToken.conjugated_form !== '基本形') {
115119
return null;
116120
}
117121

frontend/src/App.vue

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
{{ loading ? '处理中...' : '活用' }}
4545
</button>
4646

47-
<div v-if="error" class="error-message" style="display: none;">
47+
<div v-if="error" class="error-message">
4848
{{ error }}
4949
</div>
5050
</div>
@@ -369,8 +369,7 @@ const conjugate = async () => {
369369
error.value = err.response?.data?.error || '请求失败,请检查输入';
370370
// 错误时重置结果状态
371371
result.value = null;
372-
// 错误时让输入框获取焦点,并清空用户的错误输入以便显示 placeholder 的错误提示
373-
form.value.verb = '';
372+
// 错误时让输入框获取焦点,保留用户输入以便修正
374373
setTimeout(() => {
375374
document.getElementById('verb')?.focus();
376375
}, 50);
@@ -415,7 +414,28 @@ const fetchAiExplanation = async () => {
415414
416415
while (true) {
417416
const { done, value } = await reader.read();
418-
if (done) break;
417+
if (done) {
418+
// 处理 buffer 中可能残留的最后一条数据
419+
if (buffer.trim()) {
420+
const eventStr = buffer.trim();
421+
if (eventStr.startsWith('data: ')) {
422+
const dataStr = eventStr.slice(6);
423+
if (dataStr === '[DONE]') {
424+
completeProgress();
425+
} else {
426+
try {
427+
const data = JSON.parse(dataStr);
428+
if (data.content) {
429+
fullAiText += data.content;
430+
}
431+
} catch (e) {
432+
// ignore incomplete data
433+
}
434+
}
435+
}
436+
}
437+
break;
438+
}
419439
420440
buffer += decoder.decode(value, { stream: true });
421441

frontend/src/common-verbs.json

Lines changed: 0 additions & 82 deletions
This file was deleted.

0 commit comments

Comments
 (0)