pbl.js 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305
  1. // ROUTES FOR OUR APIselectClassStudent
  2. // =============================================================================
  3. const express = require("express");
  4. const request = require("request");
  5. const bcrypt = require("bcryptjs");
  6. const router = express.Router(); // get an instance of the express Router
  7. const querystring = require("querystring");
  8. var mysql = require("./mysql");
  9. // const _mysqlLabor = ["183.36.25.93", "pbl"]; //edu數據庫信息
  10. // const _mysqluser = ["183.36.25.93", "cocorobouser"]; //用户数据库信息
  11. // const _getmysqlLabor = ["123.58.32.151", "pbl"]; //edu數據庫信息f
  12. // const _getmysqluser = ["123.58.32.151", "cocorobouser"]; //edu數據庫信息
  13. const _mysqlLabor = ["172.16.12.5", "pbl"]; //edu數據庫信息
  14. const _mysqluser = ["172.16.12.5", "cocorobouser"]; //edu數據庫信息
  15. // const _getmysqlLabor = ["172.16.12.5", "pbl"]; //edu數據庫信息
  16. // const _getmysqluser = ["172.16.12.5", "cocorobouser"]; //edu數據庫信息
  17. const _getmysqlLabor2 = ["172.16.12.7", "pbl"]; //edu數據庫信息
  18. const _getmysqlLabor = ["172.16.12.7", "pbl"]; //edu數據庫信息
  19. const _getmysqluser = ["172.16.12.7", "cocorobouser"]; //edu數據庫信息
  20. const _localhost = ["127.0.0.1", "pbl"]; //edu數據庫信息
  21. const crypto = require("crypto");
  22. const https = require("https");
  23. const { Pool } = require('pg');
  24. const axios = require('axios');
  25. const multer = require("multer");
  26. const loginHandler = require('./login'); // 确保路径正确
  27. const { r2rClient } = require("r2r-js");
  28. const client = new r2rClient("https://r2rserver.cocorobo.cn/");
  29. // 配置 multer 存储选项
  30. const storage = multer.diskStorage({
  31. destination: function (req, file, cb) {
  32. req.setEncoding('utf-8');
  33. cb(null, 'uploads/'); // 文件上传目录
  34. },
  35. filename: function (req, file, cb) {
  36. req.setEncoding('utf-8');
  37. // 使用 Buffer 处理文件名,确保编码正确
  38. const fileExtension = file.originalname.split('.').pop(); // 获取文件后缀
  39. const fileNameWithoutExt = Buffer.from(file.originalname.slice(0, -(fileExtension.length + 1)), 'latin1').toString('utf8'); // 转换编码
  40. cb(null, fileNameWithoutExt + '-' + Date.now() + '.' + fileExtension); // 使用时间戳和原始文件名
  41. }
  42. });
  43. const upload = multer({
  44. storage: storage, limits: {
  45. fileSize: 100 * 1024 * 1024 // 100MB
  46. }
  47. });
  48. router.route("/login").all(async (req, res, next) => {
  49. loginHandler(req, res)
  50. });
  51. router.route("/logout").all(async (req, res, next) => {
  52. try {
  53. const response = await client.users.logout();
  54. res.status(200).json({ result: response.results });
  55. } catch (error) {
  56. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  57. }
  58. });
  59. //获取文档列表
  60. router.route("/getDocument").all(async (req, res, next) => {
  61. try {
  62. const response = await client.documents.list({
  63. limit: 10,
  64. offset: 0,
  65. });
  66. console.log(response);
  67. res.status(200).json({ result: response.results });
  68. } catch (error) {
  69. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  70. }
  71. });
  72. //列出文档块
  73. router.route("/listChunks").all(async (req, res, next) => {
  74. try {
  75. const response = await client.documents.listChunks({
  76. id: "5111165f-965c-5d61-89e3-1f74b0178032",
  77. });
  78. console.log(response);
  79. res.status(200).json({ result: response.results });
  80. } catch (error) {
  81. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  82. }
  83. });
  84. //提取实体和关系
  85. router.route("/extract").all(async (req, res, next) => {
  86. try {
  87. const response = await client.documents.extract({ id: "5111165f-965c-5d61-89e3-1f74b0178032" })
  88. console.log(response);
  89. res.status(200).json({ result: response.results });
  90. } catch (error) {
  91. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  92. }
  93. });
  94. router.route("/selectUser").all((req, res, next) => {
  95. var json = queryString(req.url);
  96. getmysql(req, res, "selectUser", json["userid"]);
  97. });
  98. // 文件上传接口
  99. router.post('/upload', upload.single('file'), async (req, res) => {
  100. req.setEncoding('utf-8')
  101. try {
  102. console.log(req.file); // 打印上传的文件信息
  103. console.log(`File path: uploads/${req.file.filename}`);
  104. const path = require('path');
  105. const filePath = path.resolve(__dirname, 'uploads', req.file.filename);
  106. console.log(filePath);
  107. let filename = Buffer.from(req.file.originalname, 'latin1').toString('utf8');
  108. const fs = require('fs');
  109. const file = new File([fs.readFileSync('./uploads/q-1739170522767.doc')], filename, { type: req.file.mimetype });
  110. const response = await client.documents.create({
  111. file: file,
  112. metadata: { title: filename }
  113. });
  114. console.log(response);
  115. res.status(200).json({ message: 'File uploaded successfully', file: req.file });
  116. } catch (error) {
  117. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  118. }
  119. });
  120. //获取文档列表
  121. router.route("/getFile").all(async (req, res, next) => {
  122. //mode的处理
  123. if (req.body[0]) {
  124. p = Object.values(req.body[0]);
  125. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getFile");
  126. mysql.usselect(p, async function (ret) {
  127. let data = ret[0];
  128. // const array = data.map(item => item.documentid);
  129. const array = data.map(item => item.documentid);
  130. try {
  131. const response = await client.documents.list({ ids: array });
  132. // const response = await client.collections.listDocuments({ id: req.body[0].folderid });
  133. // const response = await client.collections.listDocuments({ collection_ids: req.body[0].folderid.split(",") });
  134. // console.log(response);
  135. let data2 = response.results.map(doc => {
  136. doc.documentid = doc.id;
  137. delete doc.id;
  138. return doc;
  139. });
  140. // console.log(data2);
  141. // 合并data和data2,根据documentid
  142. const mergedData = data.map(item => {
  143. const correspondingDoc = data2.find(doc => doc.documentid === item.documentid);
  144. return { ...item, ...correspondingDoc };
  145. });
  146. res.status(200).json({ result: mergedData });
  147. } catch (error) {
  148. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  149. }
  150. });
  151. }
  152. });
  153. //获取文档列表
  154. router.route("/getFileD").all(async (req, res, next) => {
  155. //mode的处理
  156. if (req.body[0]) {
  157. p = Object.values(req.body[0]);
  158. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getFileD");
  159. mysql.usselect(p, async function (ret) {
  160. let data = ret[0];
  161. // const array = data.map(item => item.documentid);
  162. const array = data.map(item => item.documentid);
  163. try {
  164. const response = await client.documents.list({ ids: array });
  165. // const response = await client.collections.listDocuments({ id: req.body[0].folderid });
  166. // const response = await client.collections.listDocuments({ collection_ids: req.body[0].folderid.split(",") });
  167. // console.log(response);
  168. let data2 = response.results.map(doc => {
  169. doc.documentid = doc.id;
  170. delete doc.id;
  171. return doc;
  172. });
  173. // console.log(data2);
  174. // 合并data和data2,根据documentid
  175. const mergedData = data.map(item => {
  176. const correspondingDoc = data2.find(doc => doc.documentid === item.documentid);
  177. return { ...item, ...correspondingDoc };
  178. });
  179. res.status(200).json({ result: mergedData });
  180. } catch (error) {
  181. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  182. }
  183. });
  184. }
  185. });
  186. //获取文档列表
  187. router.route("/getFileD2").all(async (req, res, next) => {
  188. //mode的处理
  189. if (req.body) {
  190. p = [req.body.uid, req.body.folderid, req.body.n, req.body.page, req.body.num];
  191. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getFileD");
  192. mysql.usselect(p, async function (ret) {
  193. let data = ret[0];
  194. // const array = data.map(item => item.documentid);
  195. const array = data.map(item => item.documentid);
  196. try {
  197. const response = await client.documents.list({ ids: array });
  198. // const response = await client.collections.listDocuments({ id: req.body[0].folderid });
  199. // const response = await client.collections.listDocuments({ collection_ids: req.body[0].folderid.split(",") });
  200. // console.log(response);
  201. let data2 = response.results.map(doc => {
  202. doc.documentid = doc.id;
  203. delete doc.id;
  204. return doc;
  205. });
  206. // console.log(data2);
  207. // 合并data和data2,根据documentid
  208. const mergedData = data.map(item => {
  209. const correspondingDoc = data2.find(doc => doc.documentid === item.documentid);
  210. return { ...item, ...correspondingDoc };
  211. });
  212. res.status(200).json({ result: mergedData });
  213. } catch (error) {
  214. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  215. }
  216. });
  217. }
  218. });
  219. //获取文档列表
  220. router.route("/getFileOpen").all(async (req, res, next) => {
  221. //mode的处理
  222. if (req.body[0]) {
  223. p = Object.values(req.body[0]);
  224. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getFileOpen");
  225. mysql.usselect(p, async function (ret) {
  226. let data = ret[0];
  227. let user = ret[1];
  228. // const array = data.map(item => item.documentid);
  229. const array = data.map(item => item.documentid);
  230. try {
  231. const response = await client.documents.list({ ids: array });
  232. let data2 = response.results.map(doc => {
  233. doc.documentid = doc.id;
  234. delete doc.id;
  235. return doc;
  236. });
  237. // 合并data和data2,根据documentid
  238. const mergedData = data.map(item => {
  239. const correspondingDoc = data2.find(doc => doc.documentid === item.documentid);
  240. return { ...item, ...correspondingDoc };
  241. });
  242. res.status(200).json({ result: mergedData, user: user });
  243. } catch (error) {
  244. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  245. }
  246. });
  247. }
  248. });
  249. //获取文档列表2
  250. router.route("/getFileP").all(async (req, res, next) => {
  251. //mode的处理
  252. if (req.body) {
  253. p = [req.body.uid, req.body.folderid, req.body.n, req.body.page, req.body.num];
  254. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getFile");
  255. mysql.usselect(p, async function (ret) {
  256. let data = ret[0];
  257. // const array = data.map(item => item.documentid);
  258. try {
  259. // const response = await client.documents.list({ collection_ids: [req.body.folderid] });
  260. const response = await client.collections.listDocuments({ id: req.body[0].folderid });
  261. // console.log(response);
  262. let data2 = response.results.map(doc => {
  263. doc.documentid = doc.id;
  264. delete doc.id;
  265. return doc;
  266. });
  267. // 合并data和data2,根据documentid
  268. const mergedData = data.map(item => {
  269. const correspondingDoc = data2.find(doc => doc.documentid === item.documentid);
  270. return { ...item, ...correspondingDoc };
  271. });
  272. res.status(200).json({ result: mergedData });
  273. } catch (error) {
  274. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  275. }
  276. });
  277. }
  278. });
  279. //获取能关联的文件
  280. router.route("/getFile2").all(async (req, res, next) => {
  281. //mode的处理
  282. if (req.body[0]) {
  283. p = Object.values(req.body[0]);
  284. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getFile2");
  285. mysql.usselect(p, async function (ret) {
  286. let data = ret[0];
  287. const array = data.map(item => item.documentid);
  288. try {
  289. const response = await client.documents.list({ ids: array });
  290. // const response = await client.documents.list({ collection_ids: [req.body[0].folderid] });
  291. // console.log(response);
  292. let data2 = response.results.map(doc => {
  293. doc.documentid = doc.id;
  294. delete doc.id;
  295. return doc;
  296. });
  297. // 合并data和data2,根据documentid
  298. const mergedData = data.map(item => {
  299. const correspondingDoc = data2.find(doc => doc.documentid === item.documentid);
  300. return { ...item, ...correspondingDoc };
  301. });
  302. res.status(200).json({ result: mergedData });
  303. } catch (error) {
  304. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  305. }
  306. });
  307. }
  308. });
  309. //添加文件夹
  310. router.route("/addFolder").all(async (req, res, next) => {
  311. //mode的处理
  312. if (req.body[0]) {
  313. try {
  314. const response = await client.collections.create({
  315. name: decodeURIComponent(req.body[0].n),
  316. description: decodeURIComponent(req.body[0].fd)
  317. });
  318. p = [...Object.values(req.body[0]), response.results.id];
  319. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "addFolder");
  320. mysql.usselect(p, async function (ret) {
  321. res.end(JSON.stringify(ret));
  322. });
  323. } catch (error) {
  324. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  325. }
  326. }
  327. });
  328. //添加文件夹
  329. router.route("/addFolderP").all(async (req, res, next) => {
  330. //mode的处理
  331. if (req.body) {
  332. try {
  333. const response = await client.collections.create({
  334. name: decodeURIComponent(req.body.n),
  335. description: decodeURIComponent(req.body.fd)
  336. });
  337. p = [req.body.n, req.body.fd, req.body.uid, req.body.im , response.results.id];
  338. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "addFolder");
  339. mysql.usselect(p, async function (ret) {
  340. res.end(JSON.stringify(ret));
  341. });
  342. } catch (error) {
  343. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  344. }
  345. }
  346. });
  347. //删除文件夹
  348. router.route("/deleteFolder").all(async (req, res, next) => {
  349. //mode的处理
  350. if (req.body[0]) {
  351. try {
  352. const folderids = decodeURIComponent(req.body[0].folderids).split(",");
  353. const ids = req.body[0].ids;
  354. // 并行处理文件夹下的文件删除和文件夹删除
  355. await Promise.all(folderids.map(async folderid => {
  356. const files = await client.collections.listDocuments({ id: folderid, offset: 0, limit: 999 });
  357. await Promise.all(files.results.map(file =>
  358. client.collections.removeDocument({ id: folderid, documentId: file.id })
  359. ));
  360. }));
  361. await Promise.all(folderids.map(folderid => client.collections.delete({ id: folderid })));
  362. const params = [_mysqlLabor[0], _mysqlLabor[1], "deleteFolder", ids];
  363. mysql.usselect(params, async function (ret) {
  364. res.end(JSON.stringify(ret));
  365. });
  366. } catch (error) {
  367. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  368. }
  369. }
  370. });
  371. //修改文件夹
  372. router.route("/updateFolder").all(async (req, res, next) => {
  373. //mode的处理
  374. if (req.body[0]) {
  375. try {
  376. const { folderid, ...folderData } = req.body[0]; // 解构赋值,排除folderid
  377. const response = await client.collections.update({
  378. id: folderid,
  379. name: decodeURIComponent(req.body[0].n),
  380. description: decodeURIComponent(req.body[0].d)
  381. });
  382. p = Object.values(folderData); // 获取剩余属性的键
  383. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "updateFolder2");
  384. mysql.usselect(p, async function (ret) {
  385. res.end(JSON.stringify(ret));
  386. });
  387. } catch (error) {
  388. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  389. }
  390. }
  391. });
  392. //修改文件夹
  393. router.route("/updateFolder2").all(async (req, res, next) => {
  394. //mode的处理
  395. if (req.body[0]) {
  396. try {
  397. const { folderid, ...folderData } = req.body[0]; // 解构赋值,排除folderid
  398. const response = await client.collections.update({
  399. id: folderid,
  400. name: decodeURIComponent(req.body[0].n),
  401. description: decodeURIComponent(req.body[0].d)
  402. });
  403. p = Object.values(folderData); // 获取剩余属性的键
  404. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "updateFolder3");
  405. mysql.usselect(p, async function (ret) {
  406. res.end(JSON.stringify(ret));
  407. });
  408. } catch (error) {
  409. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  410. }
  411. }
  412. });
  413. //移除文件
  414. router.route("/removeFile").all(async (req, res, next) => {
  415. if (req.body[0]) {
  416. let documentids = decodeURIComponent(req.body[0].documentids).split(",");
  417. let folderid = req.body[0].folderid;
  418. let ids = req.body[0].ids;
  419. // 使用 Promise.all 确保所有删除操作都被执行
  420. const removePromises = documentids.map(documentid =>
  421. client.collections.removeDocument({ id: folderid, documentId: documentid })
  422. );
  423. // 不管client.documents报错没有也要执行removeFile
  424. Promise.all(removePromises).catch(error => {
  425. console.error("移除文件时发生错误:", error);
  426. });
  427. p = [ids, folderid];
  428. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "removeFile");
  429. mysql.usselect(p, async function (ret) {
  430. res.end(JSON.stringify(ret));
  431. });
  432. }
  433. });
  434. //移入文件
  435. router.route("/moveFile").all(async (req, res, next) => {
  436. if (req.body[0]) {
  437. try {
  438. let documentids = decodeURIComponent(req.body[0].documentids).split(",")
  439. let folderid = req.body[0].folderid
  440. let ids = decodeURIComponent(req.body[0].ids).split(",")
  441. // 使用 Promise.all 确保所有添加操作都被执行
  442. await Promise.all(documentids.map(documentid =>
  443. client.collections.addDocument({
  444. id: folderid,
  445. documentId: documentid
  446. }).catch(error => {
  447. console.error("移动文件时发生错误:", error);
  448. })
  449. ));
  450. for (const id of ids) {
  451. p = [id, folderid];
  452. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "moveFile");
  453. await mysql.usselect(p, async function (ret) { });
  454. }
  455. res.status(200).json({ messages: "移动成功" });
  456. } catch (error) {
  457. // 这里不返回错误,确保deleteFile执行完
  458. console.error("处理过程中发生错误:", error);
  459. }
  460. }
  461. });
  462. //删除文件
  463. router.route("/deleteFile").all(async (req, res, next) => {
  464. if (req.body[0]) {
  465. let documentids = decodeURIComponent(req.body[0].documentids).split(",");
  466. let ids = req.body[0].ids;
  467. // 使用 Promise.all 确保所有删除操作都被执行
  468. Promise.all(documentids.map(documentid =>
  469. client.documents.delete({ id: documentid }).catch(error => {
  470. console.error("删除文件时发生错误:", error);
  471. })
  472. ));
  473. p = [ids];
  474. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "deleteFile");
  475. mysql.usselect(p, async function (ret) {
  476. res.end(JSON.stringify(ret));
  477. });
  478. }
  479. });
  480. //删除文件
  481. router.route("/deleteFileByFilter").all(async (req, res, next) => {
  482. if (req.body[0]) {
  483. let documentids = decodeURIComponent(req.body[0].documentids).split(",");
  484. let ids = req.body[0].ids;
  485. client.documents.deleteByFilter({ filters: {"document_id": { "$in": documentids }} }).then(() => {
  486. console.log("文件删除成功");
  487. }).catch(error => {
  488. console.error("删除文件时发生错误:", error);
  489. })
  490. p = [ids];
  491. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "deleteFile");
  492. mysql.usselect(p, async function (ret) {
  493. res.end(JSON.stringify(ret));
  494. });
  495. }
  496. });
  497. router.route("/getFolder").all((req, res, next) => {
  498. getmysql2(req, res, "getFolder", req.body.uid);
  499. });
  500. router.route("/getFolder2").all((req, res, next) => {
  501. var json = queryString(req.url);
  502. getmysql2(req, res, "getFolder", json['uid']);
  503. });
  504. router.route("/getFolderPage").all((req, res, next) => {
  505. getmysql2(req, res, "getFolderPage2", req.body[0].uid, req.body[0].n, req.body[0].sub, req.body[0].class, req.body[0].page, req.body[0].num);
  506. });
  507. router.route("/getFolderPage3").all((req, res, next) => {
  508. getmysql2(req, res, "getFolderPage3", req.body[0].uid, req.body[0].n, req.body[0].sub, req.body[0].class, req.body[0].tag, req.body[0].page, req.body[0].num);
  509. });
  510. router.route("/getFolderPage32").all((req, res, next) => {
  511. var json = queryString(req.url);
  512. getmysql2(req, res, "getFolderPage3", json['uid'], json['n'], json['sub'], json['class'], json['tag'], json['page'], json["num"]);
  513. });
  514. router.route("/getFolderPageOpen").all((req, res, next) => {
  515. getmysql2(req, res, "getFolderPageOpen", req.body[0].uid, req.body[0].n, req.body[0].sub, req.body[0].class, req.body[0].tag, req.body[0].page, req.body[0].num);
  516. });
  517. router.route("/haveFile").all((req, res, next) => {
  518. postmysql(req, res, "haveFile");
  519. });
  520. router.route("/haveFolder").all((req, res, next) => {
  521. postmysql(req, res, "haveFolder");
  522. });
  523. //search文件
  524. router.route("/searchFile").all(async (req, res, next) => {
  525. if (req.body) {
  526. try {
  527. let filters = {}
  528. if (req.body.type == 1) {
  529. filters = { "document_id": { "$in": req.body.ids } }
  530. } else if (req.body.type == 2) {
  531. filters = { "collection_ids": { "$in": req.body.ids } }
  532. }
  533. const response = await client.retrieval.search({
  534. query: req.body.query,
  535. search_settings: {
  536. filters: filters,
  537. useSemanticSearch: true,
  538. chunkSettings: {
  539. limit: req.body.limit ? req.body.limit : 10,
  540. enabled: true
  541. },
  542. }
  543. });
  544. res.status(200).json({ result: response.results });
  545. } catch (error) {
  546. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  547. }
  548. }
  549. });
  550. //提取文件实体
  551. router.route("/extractFile").all(async (req, res, next) => {
  552. if (req.body) {
  553. try {
  554. const response = client.documents.extract({
  555. id: req.body.id
  556. })
  557. res.status(200).json({ result: response.results });
  558. } catch (error) {
  559. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  560. }
  561. }
  562. });
  563. //添加上传好的知识库文件
  564. router.route("/addFile").all((req, res, next) => {
  565. getmysql2(req, res, "add_file", req.body.n, req.body.did, req.body.uid, req.body.fid, req.body.mofid);
  566. })
  567. //获取文件详情
  568. router.route("/getFileDetail").all(async (req, res, next) => {
  569. if (req.body[0]) {
  570. p = Object.values(req.body[0]);
  571. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getFileDetail");
  572. mysql.usselect(p, async function (ret) {
  573. let data = ret[0][0];
  574. // const array = data.map(item => item.documentid);
  575. try {
  576. const response = await client.documents.list({ ids: [req.body[0].documentId] });
  577. // console.log(response);
  578. let data2 = response.results[0]
  579. // 合并data和data2,根据documentid
  580. const mergedData = { ...data, ...data2 };
  581. res.status(200).json({ result: mergedData });
  582. } catch (error) {
  583. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  584. }
  585. });
  586. }
  587. });
  588. //获取切片
  589. router.route("/getChunks").all(async (req, res, next) => {
  590. if (req.body[0]) {
  591. try {
  592. const { page = 1, limit = 10, documentId } = req.body[0];
  593. const offset = (page - 1) * limit;
  594. const response = await client.documents.listChunks({
  595. id: documentId,
  596. includeVectors: false,
  597. offset,
  598. limit,
  599. });
  600. res.status(200).json({ result: response });
  601. } catch (error) {
  602. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  603. }
  604. }
  605. });
  606. //获取实体
  607. router.route("/getEntities").all(async (req, res, next) => {
  608. if (req.body[0]) {
  609. try {
  610. const { page = 1, limit = 10, documentId } = req.body[0];
  611. const offset = (page - 1) * limit;
  612. const response = await client.documents.listEntities({
  613. id: documentId,
  614. includeVectors: false,
  615. offset,
  616. limit,
  617. });
  618. res.status(200).json({ result: response });
  619. } catch (error) {
  620. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  621. }
  622. }
  623. });
  624. //获取关系
  625. router.route("/getRelationships").all(async (req, res, next) => {
  626. if (req.body[0]) {
  627. try {
  628. const { page = 1, limit = 10, documentId } = req.body[0];
  629. const offset = (page - 1) * limit;
  630. const response = await client.documents.listRelationships({
  631. id: documentId,
  632. includeVectors: false,
  633. offset,
  634. limit,
  635. });
  636. res.status(200).json({ result: response });
  637. } catch (error) {
  638. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  639. }
  640. }
  641. });
  642. //获取实体和关系
  643. router.route("/getEntitiesAndRelationships").all(async (req, res, next) => {
  644. if (req.body[0]) {
  645. try {
  646. const { documentId } = req.body[0];
  647. const offset = (page - 1) * limit;
  648. const response = await client.documents.listEntities({
  649. id: documentId,
  650. includeVectors: false,
  651. });
  652. const response2 = await client.documents.listRelationships({
  653. id: documentId,
  654. includeVectors: false,
  655. });
  656. res.status(200).json({ Entities: response, Relationships: response2 });
  657. } catch (error) {
  658. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  659. }
  660. }
  661. });
  662. //提取功能
  663. router.route("/extractFile2").all(async (req, res, next) => {
  664. try {
  665. const response = await client.documents.extract({ id: req.body[0].documentid });
  666. console.log(response);
  667. res.status(200).json({ result: response.results });
  668. } catch (error) {
  669. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  670. }
  671. });
  672. //复制文件夹
  673. router.route("/copyFolder").all(async (req, res, next) => {
  674. if (req.body[0]) {
  675. const response = await client.collections.create({
  676. name: decodeURIComponent(req.body[0].n),
  677. description: decodeURIComponent(req.body[0].fd)
  678. });
  679. let folderid = response.results.id;
  680. p2 = [req.body[0].folderid]
  681. p2.unshift(_mysqlLabor[0], _mysqlLabor[1], "selectFolderFile");
  682. mysql.usselect(p2, async function (ret2) {
  683. let file = ret2[0]
  684. if (file.length) {
  685. let documentids = file.map(item => item.documentid);
  686. // 使用 Promise.all 确保所有添加操作都被执行
  687. await Promise.all(documentids.map(documentid =>
  688. client.collections.addDocument({
  689. id: folderid,
  690. documentId: documentid
  691. }).catch(error => {
  692. console.error("移动文件时发生错误:", error);
  693. })
  694. ));
  695. }
  696. let ids = file.map(item => item.fileid);
  697. console.log(ids);
  698. p = [req.body[0].n, req.body[0].fd, req.body[0].uid, 2, folderid, req.body[0].folderid, ids.join(",")];
  699. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "addFolder2");
  700. mysql.usselect(p, async function (ret) {
  701. res.end(JSON.stringify(ret));
  702. });
  703. });
  704. }
  705. });
  706. // 下载文件功能
  707. router.route("/downloadFile").all(async (req, res, next) => {
  708. var json = queryString(req.url);
  709. let params = {
  710. documentid: (json && json['documentid'] || req.body[0].documentid),
  711. filename: (json && json['filename'] || req.body[0].filename),
  712. };
  713. try {
  714. const response = await client.documents.download({ id: params.documentid });
  715. console.log(response);
  716. // 根据response的类型设置Content-Type
  717. const contentType = response.type || 'application/octet-stream';
  718. res.setHeader('Content-Type', contentType);
  719. res.setHeader('Content-Disposition', `attachment; filename="${encodeURIComponent(params.filename)}"`);
  720. // 直接发送blob数据
  721. res.send(Buffer.from(await response.arrayBuffer()));
  722. } catch (error) {
  723. console.error("下载文件时发生错误:", error);
  724. res.status(500).json({ error: error instanceof Error ? error.message : "发生错误" });
  725. }
  726. });
  727. // 下载文件功能
  728. router.route("/downloadFile2").all(async (req, res, next) => {
  729. var json = queryString(req.url);
  730. let params = {
  731. documentid: (json && json['documentid'] || req.body[0].documentid),
  732. filename: (json && json['filename'] || req.body[0].filename),
  733. };
  734. try {
  735. const response = await client.documents.download({ id: params.documentid });
  736. console.log(response);
  737. // 直接返回blob数据
  738. res.setHeader('Content-Type', response.type || 'application/octet-stream');
  739. res.setHeader('Content-Disposition', `attachment; filename="${encodeURIComponent(params.filename)}"`);
  740. const buffer = Buffer.from(await response.arrayBuffer());
  741. res.send(buffer); // 发送blob数据
  742. } catch (error) {
  743. console.error("下载文件时发生错误:", error);
  744. res.status(500).json({ error: error instanceof Error ? error.message : "发生错误" });
  745. }
  746. });
  747. //召回测试
  748. router.route("/ragFolder").all(async (req, res, next) => {
  749. let reqJson = req.body[0]
  750. if (reqJson) {
  751. reqJson.query = decodeURIComponent(reqJson.query)
  752. try {
  753. let filters = {}
  754. if (reqJson.type == 1) {
  755. filters = { "document_id": { "$in": reqJson.ids.split(",") } }
  756. } else if (reqJson.type == 2) {
  757. filters = { "collection_ids": { "$in": reqJson.ids.split(",") } }
  758. } else if (reqJson.type == 3) {
  759. filters = { "collection_ids": { "$eq": reqJson.ids } }
  760. }
  761. console.log(111);
  762. const response = await client.retrieval.search({
  763. query: reqJson.query,
  764. // searchMode: reqJson.useType == 1 ? 'basic' : reqJson.useType == 2 ? 'custom' : 'advanced',
  765. // searchMode: 'basic',
  766. searchSettings: {
  767. useHybridSearch: reqJson.useType == 3,
  768. useSemanticSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3,
  769. useFullTextSearch: reqJson.useType == 2 || reqJson.useType == 3,
  770. hybrid_settings: {
  771. fullTextWeight: reqJson.fullTextWeight ? reqJson.fullTextWeight : 1,
  772. semanticWeight: reqJson.semanticWeight ? reqJson.semanticWeight : 5,
  773. },
  774. filters: filters,
  775. limit: reqJson.limit ? reqJson.limit : 100,
  776. },
  777. ragGenerationConfig: {
  778. stream: false,
  779. temperature: reqJson.temperature ? reqJson.temperature : 0,
  780. maxTokens: reqJson.tokens ? reqJson.tokens : 5000
  781. }
  782. });
  783. // res.status(200).json({ result: response.results });
  784. p = [reqJson.userid, reqJson.ids, encodeURIComponent(JSON.stringify(reqJson)), encodeURIComponent(JSON.stringify(response.results))];
  785. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "addRagData");
  786. mysql.usselect(p, async function (ret) {
  787. res.status(200).json({ result: response.results });
  788. });
  789. } catch (error) {
  790. console.log(error);
  791. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  792. }
  793. }
  794. });
  795. //召回测试
  796. router.route("/searchFolder").all(async (req, res, next) => {
  797. let reqJson = req.body[0]
  798. if (reqJson) {
  799. try {
  800. let filters = {}
  801. let documentids = reqJson.documentids ? decodeURIComponent(reqJson.documentids).split(",").filter(id => id) : [];
  802. let folderids = reqJson.folderids ? decodeURIComponent(reqJson.folderids).split(",").filter(id => id) : [];
  803. filters = {
  804. "$or": [
  805. { "collection_ids": { "$in": folderids } },
  806. { "document_id": { "$in": documentids } }
  807. ]
  808. };
  809. let params = {
  810. query: reqJson.query,
  811. searchSettings: {
  812. useHybridSearch: reqJson.useType == 3,
  813. useSemanticSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3,
  814. useFullTextSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3,
  815. hybrid_settings: {
  816. fullTextWeight: reqJson.fullTextWeight ? reqJson.fullTextWeight : 1,
  817. semanticWeight: reqJson.semanticWeight ? reqJson.semanticWeight : 5,
  818. },
  819. filters: filters,
  820. limit: reqJson.limit ? reqJson.limit : 100,
  821. },
  822. ragGenerationConfig: {
  823. stream: false,
  824. temperature: reqJson.temperature ? reqJson.temperature : 0,
  825. maxTokens: reqJson.tokens ? reqJson.tokens : 5000
  826. }
  827. }
  828. // console.log(params);
  829. const response = await client.retrieval.search(params);
  830. res.status(200).json({ result: response.results });
  831. } catch (error) {
  832. console.log(error);
  833. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  834. }
  835. }
  836. });
  837. //召回测试
  838. router.route("/searchFolder2").all(async (req, res, next) => {
  839. let reqJson = req.body
  840. if (reqJson) {
  841. try {
  842. let filters = {}
  843. let documentids = reqJson.documentids ? decodeURIComponent(reqJson.documentids).split(",").filter(id => id) : [];
  844. let folderids = reqJson.folderids ? decodeURIComponent(reqJson.folderids).split(",").filter(id => id) : [];
  845. filters = {
  846. "$or": [
  847. { "collection_ids": { "$in": folderids } },
  848. { "document_id": { "$in": documentids } }
  849. ]
  850. };
  851. let params = {
  852. query: reqJson.query,
  853. searchSettings: {
  854. useHybridSearch: reqJson.useType == 3,
  855. useSemanticSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3,
  856. useFullTextSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3,
  857. hybrid_settings: {
  858. fullTextWeight: reqJson.fullTextWeight ? reqJson.fullTextWeight : 1,
  859. semanticWeight: reqJson.semanticWeight ? reqJson.semanticWeight : 5,
  860. },
  861. filters: filters,
  862. limit: reqJson.limit ? reqJson.limit : 100,
  863. },
  864. ragGenerationConfig: {
  865. stream: false,
  866. temperature: reqJson.temperature ? reqJson.temperature : 0,
  867. maxTokens: reqJson.tokens ? reqJson.tokens : 5000
  868. }
  869. }
  870. // console.log(params);
  871. const response = await client.retrieval.search(params);
  872. res.status(200).json({ result: response.results });
  873. } catch (error) {
  874. console.log(error);
  875. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  876. }
  877. }
  878. });
  879. //召回测试
  880. router.route("/searchFolder3").all(async (req, res, next) => {
  881. let reqJson = req.body[0]
  882. if (reqJson) {
  883. reqJson.query = decodeURIComponent(reqJson.query)
  884. try {
  885. let filters = {}
  886. let documentids = reqJson.documentids ? decodeURIComponent(reqJson.documentids).split(",").filter(id => id) : [];
  887. let folderids = reqJson.folderids ? decodeURIComponent(reqJson.folderids).split(",").filter(id => id) : [];
  888. filters = {
  889. "$or": [
  890. { "collection_ids": { "$in": folderids } },
  891. { "document_id": { "$in": documentids } }
  892. ]
  893. };
  894. let params = {
  895. query: reqJson.query,
  896. searchSettings: {
  897. useHybridSearch: reqJson.useType == 3,
  898. useSemanticSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3,
  899. useFullTextSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3,
  900. hybrid_settings: {
  901. fullTextWeight: reqJson.fullTextWeight,
  902. semanticWeight: reqJson.semanticWeight,
  903. },
  904. filters: filters,
  905. limit: reqJson.limit ? reqJson.limit : 100,
  906. },
  907. ragGenerationConfig: {
  908. stream: false,
  909. temperature: reqJson.temperature ? reqJson.temperature : 0,
  910. maxTokens: reqJson.tokens ? reqJson.tokens : 5000
  911. }
  912. }
  913. // console.log(params);
  914. const response = await client.retrieval.search(params);
  915. p = [reqJson.userid, reqJson.folderids, encodeURIComponent(JSON.stringify(reqJson)), encodeURIComponent(JSON.stringify(response.results))];
  916. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "addRagData");
  917. mysql.usselect(p, async function (ret) {
  918. res.status(200).json({ result: response.results });
  919. });
  920. } catch (error) {
  921. console.log(error);
  922. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  923. }
  924. }
  925. });
  926. //召回测试
  927. router.route("/searchFolder32").all(async (req, res, next) => {
  928. let reqJson = req.body[0]
  929. if (reqJson) {
  930. reqJson.query = decodeURIComponent(reqJson.query)
  931. try {
  932. let filters = {}
  933. let documentids = reqJson.documentids ? decodeURIComponent(reqJson.documentids).split(",").filter(id => id) : [];
  934. let folderids = reqJson.folderids ? decodeURIComponent(reqJson.folderids).split(",").filter(id => id) : [];
  935. filters = {
  936. "$or": [
  937. { "collection_ids": { "$in": folderids } },
  938. { "document_id": { "$in": documentids } }
  939. ]
  940. };
  941. let params = {
  942. query: reqJson.query,
  943. searchSettings: {
  944. useHybridSearch: reqJson.useType == 3,
  945. useSemanticSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3,
  946. useFullTextSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3,
  947. hybrid_settings: {
  948. fullTextWeight: reqJson.fullTextWeight,
  949. semanticWeight: reqJson.semanticWeight,
  950. },
  951. filters: filters,
  952. limit: reqJson.limit ? reqJson.limit : 100,
  953. },
  954. ragGenerationConfig: {
  955. stream: false,
  956. temperature: reqJson.temperature ? reqJson.temperature : 0,
  957. maxTokens: reqJson.tokens ? reqJson.tokens : 5000
  958. }
  959. }
  960. // console.log(params);
  961. const response = await client.retrieval.search(params);
  962. res.status(200).json({ result: response.results });
  963. // p = [reqJson.userid, reqJson.folderids, encodeURIComponent(JSON.stringify(reqJson)), encodeURIComponent(JSON.stringify(response.results))];
  964. // p.unshift(_mysqlLabor[0], _mysqlLabor[1], "addRagData");
  965. // mysql.usselect(p, async function (ret) {
  966. // });
  967. } catch (error) {
  968. console.log(error);
  969. res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" });
  970. }
  971. }
  972. });
  973. //获取召回测试数据
  974. router.route("/getRagData").all(async (req, res, next) => {
  975. //mode的处理
  976. if (req.body[0]) {
  977. p = Object.values(req.body[0]);
  978. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getRagData");
  979. mysql.usselect(p, async function (ret) {
  980. res.status(200).json(ret);
  981. });
  982. }
  983. });
  984. //删除召回测试数据
  985. router.route("/delRagData").all(async (req, res, next) => {
  986. //mode的处理
  987. if (req.body[0]) {
  988. p = Object.values(req.body[0]);
  989. p.unshift(_mysqlLabor[0], _mysqlLabor[1], "delRagData");
  990. mysql.usselect(p, async function (ret) {
  991. res.status(200).json(ret);
  992. });
  993. }
  994. });
  995. function generateAPIKey(username) {
  996. let timeStamp = new Date().getTime();
  997. let hashStr = timeStamp + username;
  998. let digest = crypto
  999. .createHash("sha256")
  1000. .update(hashStr, "utf8")
  1001. .digest("hex");
  1002. return digest;
  1003. }
  1004. queryString = function (url) {
  1005. var a = url.split("?");
  1006. var json = querystring.parse(a[1]);
  1007. return json;
  1008. };
  1009. //post存儲過程處理
  1010. postmysql = function (req, res, functionname) {
  1011. //mode的處理
  1012. if (req.body[0]) {
  1013. p = Object.values(req.body[0]);
  1014. p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname);
  1015. //執行存儲過程
  1016. mysql.usselect(p, function (ret) {
  1017. res.end(JSON.stringify(ret));
  1018. });
  1019. }
  1020. };
  1021. //post存儲過程處理
  1022. postmysql2 = function (req, res, functionname) {
  1023. //mode的處理
  1024. if (req.body) {
  1025. p = Object.values(req.body)[0].split(",");
  1026. p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname);
  1027. //執行存儲過程
  1028. mysql.usselect(p, function (ret) {
  1029. res.end(JSON.stringify(ret));
  1030. });
  1031. }
  1032. };
  1033. //post存儲過程處理
  1034. postmysql3 = function (req, res, functionname) {
  1035. //mode的處理
  1036. if (req.body) {
  1037. console.log(req);
  1038. p = Object.values(req.body);
  1039. p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname);
  1040. //執行存儲過程
  1041. mysql.usselect(p, function (ret) {
  1042. res.end(JSON.stringify(ret));
  1043. });
  1044. }
  1045. };
  1046. //get獲取數據庫信息
  1047. getmysql = function (req, res, functionname, ...p) {
  1048. p = p || [];
  1049. p.unshift(_getmysqlLabor[0], _getmysqlLabor[1], functionname);
  1050. //執行存儲過程
  1051. mysql.usselect(p, function (ret) {
  1052. res.end(JSON.stringify(ret));
  1053. }); //
  1054. };
  1055. //get獲取數據庫信息
  1056. getmysql2 = function (req, res, functionname, ...p) {
  1057. p = p || [];
  1058. p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname);
  1059. //執行存儲過程
  1060. mysql.usselect(p, function (ret) {
  1061. res.end(JSON.stringify(ret));
  1062. }); //
  1063. };
  1064. //get獲取數據庫信息
  1065. getmysql3 = function (req, res, functionname, ...p) {
  1066. p = p || [];
  1067. p.unshift(_getmysqlLabor2[0], _getmysqlLabor2[1], functionname);
  1068. //執行存儲過程
  1069. mysql.usselect(p, function (ret) {
  1070. res.end(JSON.stringify(ret));
  1071. }); //
  1072. };
  1073. //post存储过程处理
  1074. userpostmysql = function (req, res, functionname) {
  1075. //mode的处理
  1076. if (req.body.mode) {
  1077. p = req.body.mode.split(",");
  1078. p.unshift(_mysqluser[0], _mysqluser[1], functionname);
  1079. //执行存储过程
  1080. mysql.usselect(p, function (ret) {
  1081. res.end(JSON.stringify(ret));
  1082. });
  1083. }
  1084. };
  1085. //get获取数据库信息
  1086. usergetmysql = function (req, res, functionname, ...p) {
  1087. p = p || [];
  1088. p.unshift(_mysqluser[0], _mysqluser[1], functionname);
  1089. //执行存储过程
  1090. mysql.usselect(p, function (ret) {
  1091. res.end(JSON.stringify(ret));
  1092. }); //
  1093. };
  1094. //post存儲過程處理
  1095. postmysqlLocal = function (req, res) {
  1096. //mode的處理
  1097. if (req.body[0]) {
  1098. p = Object.values(req.body[0]);
  1099. p.unshift(_localhost[0], _localhost[1]);
  1100. //執行存儲過程
  1101. mysql.usselect(p, function (ret) {
  1102. res.end(JSON.stringify(ret));
  1103. });
  1104. }
  1105. };
  1106. postmysqlOnline = function (req, res) {
  1107. //mode的處理
  1108. if (req.body[0]) {
  1109. p = Object.values(req.body[0]);
  1110. p.unshift(_mysqlLabor[0], _mysqlLabor[1]);
  1111. //執行存儲過程
  1112. mysql.usselect(p, function (ret) {
  1113. res.end(JSON.stringify(ret));
  1114. });
  1115. }
  1116. };
  1117. module.exports = router;