Skip to content

Commit 58d5fc2

Browse files
authored
merge: 优化和修复异常处理 (#32)
2 parents 3d9e9c0 + 0cac624 commit 58d5fc2

File tree

5 files changed

+53
-157
lines changed

5 files changed

+53
-157
lines changed

README.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# DeepLX Serverless
22

3+
<p align="center">
4+
<a href="https://github.com/guobao2333/MT-syntax-highlight"><img alt="Repository" src="https://img.shields.io/badge/Github-%230A0A0A.svg?&style=flat-square&logo=Github&logoColor=white"/></a>
5+
</p>
6+
37
***本项目3.0版本开始完全基于[OwO-Network/DeepLX](https://github.com/OwO-Network/DeepLX)和DeepL网页端API进行重写。***
48
**2.0及之前版本在[LegendLeo/deeplx-serverless](https://github.com/LegendLeo/deeplx-serverless)的基础上进行重构。**
59

@@ -69,7 +73,7 @@ curl -X POST 'http://localhost:6119/translate' -H 'Content-Type: application/jso
6973

7074
简单的示例:
7175
```javascript
72-
import { translate } from './translate.js';
76+
import { translate } from './src/translate.js';
7377
translate('how are you?', 'en', 'zh', '', false, false)
7478
.then(result => {
7579
console.log(result)

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"version": "3.0.1",
44
"description": "DeepL free API for Serverless",
55
"type": "module",
6-
"main": "server.js",
6+
"main": "src/server.js",
77
"keywords": [
88
"deeplxs",
99
"deeplx",
@@ -19,7 +19,7 @@
1919
"scripts": {
2020
"start": "node src/server.js",
2121
"test": "node test.js",
22-
"start:sl": "node src/index.js",
22+
"start:sl": "node api/index.js",
2323
"test:post": "node test_post.js"
2424
},
2525
"dependencies": {

src/server.js

+16-9
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ async function post(req, res) {
7272
code: 405,
7373
message: "Alternative Translate Not Allowed"
7474
});
75-
// alt_count = 0;
7675
}
7776

7877
try {
@@ -83,10 +82,19 @@ async function post(req, res) {
8382
return decompressedData;
8483
});*/
8584

86-
const duration = Date.now() - startTime; // 计算处理时间
85+
let duration = Date.now() - startTime;
86+
if(result.code === 429) {
87+
console.error(`[WARN] ${new Date().toISOString()} | POST "translate" | 429 | ${result.message} | ${duration}ms`);
88+
res.status(429).json({
89+
code: 429,
90+
message: result.message
91+
});
92+
}
93+
94+
duration = Date.now() - startTime;
8795
// console.log(result);
88-
if(result == "") {
89-
console.error(`[ERROR] ${new Date().toISOString()} | POST "translate" | 500 | ${error.message} | ${duration}ms`);
96+
if(result == "" || result.data == "") {
97+
console.error(`[ERROR] ${new Date().toISOString()} | POST "translate" | 500 | ${result.message} | ${duration}ms`);
9098
res.status(500).json({
9199
code: 500,
92100
message: "Translation failed",
@@ -96,7 +104,7 @@ async function post(req, res) {
96104
console.log(`[LOG] ${new Date().toISOString()} | POST "translate" | 200 | ${duration}ms`);
97105

98106
const responseData = {
99-
code: 200,
107+
code: result.code,
100108
id: result.id,
101109
data: result.data, // 取第一个翻译结果
102110
method: "Free",
@@ -116,16 +124,15 @@ async function post(req, res) {
116124

117125
} catch (err) {
118126
console.error(err, err.stack);
119-
return res.status(500).json({
127+
res.status(500).json({
120128
code: 500,
121-
message: "Translation failed",
122-
error: err.message
129+
message: err.message
123130
});
124131
}
125132
};
126133

127134
async function get(req, res) {
128-
res.json({
135+
res.status(200).json({
129136
code: 200,
130137
message: "Welcome to the DeepL Free API. Please POST to '/translate'. Visit 'https://github.com/guobao2333/DeepLX-Serverless' for more information."
131138
});

src/translate.js

+30-15
Original file line numberDiff line numberDiff line change
@@ -35,24 +35,33 @@ async function sendRequest(postData, urlMethod, dlSession, printResult) {
3535
...(dlSession && {'Cookie': `dl_session=${dlSession}`})
3636
};
3737
postData = formatPostString(postData);
38-
// console.log(postData);
38+
// console.warn(postData);
3939

4040
try {
4141
const response = await axios.post(urlFull, postData, {
4242
headers: headers
4343
});
44-
// console.log(response.data);
45-
44+
4645
if (response.headers['content-encoding'] === 'br') {
47-
const decompressed = brotliDecompress(response.data, (err, data) => {
48-
if (err) console.error(err);
49-
return data;
46+
const decompressed = await new Promise((resolve, reject) => {
47+
brotliDecompress(response.data, (err, data) => {
48+
if (err) reject(err);
49+
else resolve(data);
50+
});
5051
});
5152
return JSON.parse(decompressed.toString());
5253
}
5354
return response.data;
5455
} catch (err) {
55-
console.error(err);
56+
if (err.response.status === 429) {
57+
return {
58+
code: err.response.status,
59+
message: 'Too Many Requests'
60+
};
61+
} else {
62+
console.error(`[ERROR] sendRequest: ${err.message}`);
63+
throw err;
64+
}
5665
}
5766
}
5867

@@ -69,7 +78,12 @@ async function splitText(text, tagHandling, dlSession, printResult) {
6978
}
7079
};
7180

72-
return await sendRequest(postData, 'LMT_split_text', dlSession, printResult);
81+
try {
82+
return await sendRequest(postData, 'LMT_split_text', dlSession, printResult);
83+
} catch (err) {
84+
console.error("[ERROR] splitText:", err);
85+
throw new Error(`splitText failed: ${err.message || err}`);
86+
}
7387
}
7488

7589
// 执行翻译任务
@@ -81,12 +95,12 @@ async function translate(text, sourceLang, targetLang, dlSession, tagHandling, p
8195

8296
// 分割文本
8397
const splitResult = await splitText(text, tagHandling === 'html' || tagHandling === 'xml', dlSession, printResult);
84-
// console.log(splitResult);
98+
// console.warn(splitResult);
8599

86-
if (splitResult.code == 429) {
87-
throw {
100+
if (splitResult.code === 429) {
101+
return {
88102
code: splitResult.code,
89-
message: splitResult.data.error
103+
message: splitResult.message
90104
}
91105
}
92106

@@ -157,7 +171,7 @@ async function translate(text, sourceLang, targetLang, dlSession, tagHandling, p
157171
}
158172

159173
const ret = {
160-
code: 200,
174+
code: postData.status,
161175
id: postData.id,
162176
method: "Free",
163177
data: translatedText,
@@ -167,8 +181,9 @@ async function translate(text, sourceLang, targetLang, dlSession, tagHandling, p
167181
}
168182
if(printResult) console.log(ret);
169183
return ret;
170-
} catch(err) {
171-
return err;
184+
} catch (err) {
185+
console.error("[ERROR] translate:", err);
186+
throw new Error(err.message || err);
172187
}
173188
}
174189

src/translate_old.js

-130
This file was deleted.

0 commit comments

Comments
 (0)