smgc commited on
Commit
cb725da
1 Parent(s): cc24f21

Update app.js

Browse files
Files changed (1) hide show
  1. app.js +21 -17
app.js CHANGED
@@ -84,6 +84,9 @@ function formatModelName(model) {
84
  return model;
85
  }
86
 
 
 
 
87
  async function handleRequest(req, res) {
88
  if (req.method === 'OPTIONS') {
89
  handleOptions(res);
@@ -135,7 +138,7 @@ async function handleRequest(req, res) {
135
  body: JSON.stringify(requestBody)
136
  });
137
 
138
- console.log('Response headers:', response.headers.raw()); // 打印所有响应头
139
 
140
  res.status(response.status);
141
 
@@ -150,29 +153,29 @@ async function handleRequest(req, res) {
150
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, x-api-key, anthropic-version, model');
151
 
152
  const contentEncoding = response.headers.get('content-encoding');
153
- console.log('Content-Encoding:', contentEncoding); // 打印内容编码
154
 
155
- if (contentEncoding === 'gzip') {
156
- const gunzip = zlib.createGunzip();
157
- gunzip.on('error', (err) => {
158
- console.error('Gunzip error:', err);
159
- res.status(500).json({
160
- type: "error",
161
- error: {
162
- type: "decompression_error",
163
- message: "Failed to decompress the response"
164
- }
165
- });
166
- });
167
 
168
- response.body.pipe(gunzip).pipe(res);
 
 
 
 
 
 
 
 
169
  } else {
170
- response.body.pipe(res);
171
  }
172
 
 
173
  logRequest(req, response.status, `Request forwarded successfully for model: ${model}`);
174
  } catch (error) {
175
- console.error('Fetch error:', error);
176
  res.status(500).json({
177
  type: "error",
178
  error: {
@@ -185,6 +188,7 @@ async function handleRequest(req, res) {
185
  }
186
 
187
 
 
188
  function handleOptions(res) {
189
  res.status(204);
190
  res.setHeader('Access-Control-Allow-Origin', '*');
 
84
  return model;
85
  }
86
 
87
+ const { promisify } = require('util');
88
+ const gunzip = promisify(zlib.gunzip);
89
+
90
  async function handleRequest(req, res) {
91
  if (req.method === 'OPTIONS') {
92
  handleOptions(res);
 
138
  body: JSON.stringify(requestBody)
139
  });
140
 
141
+ console.log('Response headers:', response.headers.raw());
142
 
143
  res.status(response.status);
144
 
 
153
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, x-api-key, anthropic-version, model');
154
 
155
  const contentEncoding = response.headers.get('content-encoding');
156
+ console.log('Content-Encoding:', contentEncoding);
157
 
158
+ // 读取整个响应体
159
+ const buffer = await response.buffer();
160
+ console.log('Response body length:', buffer.length);
 
 
 
 
 
 
 
 
 
161
 
162
+ let data;
163
+ if (contentEncoding === 'gzip') {
164
+ try {
165
+ data = await gunzip(buffer);
166
+ } catch (error) {
167
+ console.error('Gunzip error:', error);
168
+ console.log('First 100 bytes of response:', buffer.slice(0, 100).toString('hex'));
169
+ throw new Error('Failed to decompress the response');
170
+ }
171
  } else {
172
+ data = buffer;
173
  }
174
 
175
+ res.send(data);
176
  logRequest(req, response.status, `Request forwarded successfully for model: ${model}`);
177
  } catch (error) {
178
+ console.error('Request error:', error);
179
  res.status(500).json({
180
  type: "error",
181
  error: {
 
188
  }
189
 
190
 
191
+
192
  function handleOptions(res) {
193
  res.status(204);
194
  res.setHeader('Access-Control-Allow-Origin', '*');