| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- // 请求预处理
- // 在请求被处理之前执行的函数
- //
- // @param {Object} ctx - 请求上下文对象
- // @returns {Object|undefined} - 返回修改后的请求对象或 undefined
- //
- // 参考: [JS Rt](./middleware/js_rt.go) 里的 `JSContext`
- function preProcessRequest(ctx) {
- // 例子:基于数据库的速率限制
- // if (ctx.url.includes("/v1/chat/completions")) {
- // try {
- // // Check recent requests from this IP
- // var recentRequests = db.Query(
- // "SELECT COUNT(*) as count FROM logs WHERE created_at > ? AND ip = ?",
- // Math.floor(Date.now() / 1000) - 60, // last minute
- // ctx.remoteIP
- // );
- // if (recentRequests && recentRequests.length > 0 && recentRequests[0].count > 10) {
- // console.log("速率限制 IP:", ctx.RemoteIP);
- // return {
- // block: true,
- // statusCode: 429,
- // message: "超过速率限制"
- // };
- // }
- // } catch (e) {
- // console.error("Ratelimit 数据库错误:", e);
- // }
- // }
- // 例子:修改请求
- if (ctx.URL.includes("/v1/chat/completions")) {
- try {
- var bodyObj = ctx.Body;
- let firstMsg = {
- role: "user",
- content: "今天天气怎么样"
- };
- bodyObj.messages[0] = firstMsg;
- console.log("Modified first message:", JSON.stringify(firstMsg));
- console.log("Modified body:", JSON.stringify(bodyObj));
- return {
- body: bodyObj,
- headers: {
- ...ctx.Headers,
- "X-Modified-Body": "true"
- }
- };
- } catch (e) {
- console.error("Failed to modify request body:", {
- message: e.message,
- stack: e.stack,
- bodyType: typeof ctx.Body,
- url: ctx.URL
- });
- }
- }
- return undefined; // 跳过处理,继续执行下一个中间件或路由
- }
|