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