nodejs流式反向代理ollama api示例代码
代码语言:nodejs
所属分类:其他
代码描述:nodejs流式反向代理ollama api示例代码
代码标签: nodejs 流式 反向 代理 ollama api 示例 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
const http = require('http');
const url = require('url');
const fs = require('fs');
const path = require('path');
const { exec, spawn } = require('child_process');
const httpProxy = require('http-proxy');
const os = require('os');
const axios = require('axios');
const { setTimeout } = require('timers');
// 创建一个 Map 来存储正在进行的请求
const activeRequests = new Map();
// 创建反向代理服务器
const proxy = httpProxy.createProxyServer({ ws: true });
// 监听 proxyReq 事件来获取后端请求对象
proxy.on('proxyReq', (proxyReq, req, res) => {
//proxyReq.setHeader('Host', 'localhost:11434');
activeRequests.set(req, proxyReq);
});
// 监听 proxyRes 事件来清理已完成的请求
proxy.on('proxyRes', (proxyRes, req, res) => {
activeRequests.delete(req);
});
// 监听错误事件
proxy.on('error', (err, req, res) => {
console.error('Proxy error:', err);
activeRequests.delete(req);
res.writeHead(502, { 'Content-Type': 'text/plain' });
res.end('Proxy Error');
});
// 获取局域网 IP 地址
function getLocalIp() {
const interfaces = os.networkInterfaces();
for (const name of Object.keys(interfaces)) {
for (const iface of interfaces[name]) {
if (iface.family === 'IPv4' && !iface.internal) {
return iface.address;
}
}
}
return '127.0.0.1';
}
function getBodyText(html) {
// 使用正则表达式匹配<body>标签内的内容
const bodyMatch = html.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
if (bodyMatch && bodyMatch[1]) {
// 去除HTML标签,只保留文本内容
return bodyMatch[1].replace(/<[^>]+>/g, '');
}
return '';
}
// 处理 POST 请求的 JSON 数据
function handlePostRequest(req, res) {
let body = '';
req.on('data', chunk => {
body += chunk.toStr.........完整代码请登录后点击上方下载按钮下载查看
网友评论0