// ROUTES FOR OUR APIselectClassStudent // ============================================================================= const express = require("express"); const request = require("request"); const bcrypt = require("bcryptjs"); const router = express.Router(); // get an instance of the express Router const querystring = require("querystring"); var mysql = require("./mysql"); // const _mysqlLabor = ["123.58.32.151", "pbl"]; //edu數據庫信息 // const _mysqluser = ["123.58.32.151", "cocorobouser"]; //用户数据库信息 // const _getmysqlLabor = ["123.58.32.151", "pbl"]; //edu數據庫信息 // const _getmysqluser = ["123.58.32.151", "cocorobouser"]; //edu數據庫信息 const _mysqlLabor = ["172.16.12.5", "pbl"]; //edu數據庫信息 const _mysqluser = ["172.16.12.5", "cocorobouser"]; //edu數據庫信息 // const _getmysqlLabor = ["172.16.12.5", "pbl"]; //edu數據庫信息 // const _getmysqluser = ["172.16.12.5", "cocorobouser"]; //edu數據庫信息 const _getmysqlLabor2 = ["172.16.12.7", "pbl"]; //edu數據庫信息 const _getmysqlLabor = ["172.16.12.7", "pbl"]; //edu數據庫信息 const _getmysqluser = ["172.16.12.7", "cocorobouser"]; //edu數據庫信息 const _localhost = ["127.0.0.1", "pbl"]; //edu數據庫信息 const crypto = require("crypto"); const https = require("https"); const { Pool } = require('pg'); const axios = require('axios'); const multer = require("multer"); const loginHandler = require('./login'); // 确保路径正确 const { r2rClient } = require("r2r-js"); const client = new r2rClient("https://r2rserver.cocorobo.cn/"); // 配置 multer 存储选项 const storage = multer.diskStorage({ destination: function (req, file, cb) { req.setEncoding('utf-8'); cb(null, 'uploads/'); // 文件上传目录 }, filename: function (req, file, cb) { req.setEncoding('utf-8'); // 使用 Buffer 处理文件名,确保编码正确 const fileExtension = file.originalname.split('.').pop(); // 获取文件后缀 const fileNameWithoutExt = Buffer.from(file.originalname.slice(0, -(fileExtension.length + 1)), 'latin1').toString('utf8'); // 转换编码 cb(null, fileNameWithoutExt + '-' + Date.now() + '.' + fileExtension); // 使用时间戳和原始文件名 } }); const upload = multer({ storage: storage, limits: { fileSize: 100 * 1024 * 1024 // 100MB } }); router.route("/login").all(async (req, res, next) => { loginHandler(req, res) }); router.route("/logout").all(async (req, res, next) => { try { const response = await client.users.logout(); res.status(200).json({result: response.results}); } catch (error) { res.status(500).json({error: error instanceof Error ? error.message : "An error occurred"}); } }); //获取文档列表 router.route("/getDocument").all(async (req, res, next) => { try { const response = await client.documents.list({ limit: 10, offset: 0, }); console.log(response); res.status(200).json({ result: response.results }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); //列出文档块 router.route("/listChunks").all(async (req, res, next) => { try { const response = await client.documents.listChunks({ id: "5111165f-965c-5d61-89e3-1f74b0178032", }); console.log(response); res.status(200).json({ result: response.results }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); //提取实体和关系 router.route("/extract").all(async (req, res, next) => { try { const response = await client.documents.extract({ id: "5111165f-965c-5d61-89e3-1f74b0178032" }) console.log(response); res.status(200).json({ result: response.results }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); router.route("/selectUser").all((req, res, next) => { var json = queryString(req.url); getmysql(req, res, "selectUser", json["userid"]); }); // 文件上传接口 router.post('/upload', upload.single('file'), async (req, res) => { req.setEncoding('utf-8') try { console.log(req.file); // 打印上传的文件信息 console.log(`File path: uploads/${req.file.filename}`); const path = require('path'); const filePath = path.resolve(__dirname, 'uploads', req.file.filename); console.log(filePath); let filename = Buffer.from(req.file.originalname, 'latin1').toString('utf8'); const fs = require('fs'); const file = new File([fs.readFileSync('./uploads/q-1739170522767.doc')], filename, { type: req.file.mimetype }); const response = await client.documents.create({ file: file, metadata: { title: filename } }); console.log(response); res.status(200).json({ message: 'File uploaded successfully', file: req.file }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); //获取文档列表 router.route("/getFile").all(async (req, res, next) => { //mode的处理 if (req.body[0]) { p = Object.values(req.body[0]); p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getFile"); mysql.usselect(p, async function(ret) { console.log(ret); // let array = [] res.end(JSON.stringify(ret)); // try { // const response = await client.documents.list({ ids: [] }); // console.log(response); // res.status(200).json({ result: response.results }); // } catch (error) { // res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); // } }); } }); function generateAPIKey(username) { let timeStamp = new Date().getTime(); let hashStr = timeStamp + username; let digest = crypto .createHash("sha256") .update(hashStr, "utf8") .digest("hex"); return digest; } queryString = function(url) { var a = url.split("?"); var json = querystring.parse(a[1]); return json; }; //post存儲過程處理 postmysql = function(req, res, functionname) { //mode的處理 if (req.body[0]) { p = Object.values(req.body[0]); p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname); //執行存儲過程 mysql.usselect(p, function(ret) { res.end(JSON.stringify(ret)); }); } }; //post存儲過程處理 postmysql2 = function(req, res, functionname) { //mode的處理 if (req.body) { p = Object.values(req.body)[0].split(","); p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname); //執行存儲過程 mysql.usselect(p, function(ret) { res.end(JSON.stringify(ret)); }); } }; //post存儲過程處理 postmysql3 = function(req, res, functionname) { //mode的處理 if (req.body) { p = Object.values(req.body); p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname); //執行存儲過程 mysql.usselect(p, function(ret) { res.end(JSON.stringify(ret)); }); } }; //get獲取數據庫信息 getmysql = function(req, res, functionname, ...p) { p = p || []; p.unshift(_getmysqlLabor[0], _getmysqlLabor[1], functionname); //執行存儲過程 mysql.usselect(p, function(ret) { res.end(JSON.stringify(ret)); }); // }; //get獲取數據庫信息 getmysql2 = function(req, res, functionname, ...p) { p = p || []; p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname); //執行存儲過程 mysql.usselect(p, function(ret) { res.end(JSON.stringify(ret)); }); // }; //get獲取數據庫信息 getmysql3 = function(req, res, functionname, ...p) { p = p || []; p.unshift(_getmysqlLabor2[0], _getmysqlLabor2[1], functionname); //執行存儲過程 mysql.usselect(p, function(ret) { res.end(JSON.stringify(ret)); }); // }; //post存储过程处理 userpostmysql = function(req, res, functionname) { //mode的处理 if (req.body.mode) { p = req.body.mode.split(","); p.unshift(_mysqluser[0], _mysqluser[1], functionname); //执行存储过程 mysql.usselect(p, function(ret) { res.end(JSON.stringify(ret)); }); } }; //get获取数据库信息 usergetmysql = function(req, res, functionname, ...p) { p = p || []; p.unshift(_mysqluser[0], _mysqluser[1], functionname); //执行存储过程 mysql.usselect(p, function(ret) { res.end(JSON.stringify(ret)); }); // }; //post存儲過程處理 postmysqlLocal = function(req, res) { //mode的處理 if (req.body[0]) { p = Object.values(req.body[0]); p.unshift(_localhost[0], _localhost[1]); //執行存儲過程 mysql.usselect(p, function(ret) { res.end(JSON.stringify(ret)); }); } }; postmysqlOnline = function(req, res) { //mode的處理 if (req.body[0]) { p = Object.values(req.body[0]); p.unshift(_mysqlLabor[0], _mysqlLabor[1]); //執行存儲過程 mysql.usselect(p, function(ret) { res.end(JSON.stringify(ret)); }); } }; module.exports = router;