queryuser-account-group.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. // /**
  2. // * 安装pg-promise库,并引入
  3. // * npm init
  4. // * npm i -S pg-promise
  5. // */
  6. //
  7. // const http = require('http');
  8. //
  9. // const initOptions = {/* initialization options */};
  10. // const pgp = require('pg-promise')(initOptions);
  11. // const db = pgp('postgres://web3:666@dbo.fmode.cn:5432/dev');
  12. //
  13. // async function analysisStudentAgeByGroup(account, password) {
  14. // account = account.toString();
  15. // let sql = `SELECT *
  16. // FROM "LjUser"
  17. // WHERE "account" = $1
  18. // AND "password" = $2;`;
  19. //
  20. // let result = await db.any(sql, [account, password]);
  21. // return result;
  22. // }
  23. //
  24. // const server = http.createServer(async (req, res) => {
  25. // if (req.url === '/user/login/get') {
  26. // try {
  27. // if (req.method === 'POST') {
  28. // let body = '';
  29. // req.on('data', (chunk) => {
  30. // body += chunk.toString();
  31. // });
  32. //
  33. // req.on('end', async () => {
  34. // const {account, password} = JSON.parse(body);
  35. // const result = await analysisStudentAgeByGroup(account, password);
  36. // res.writeHead(200, {'Content-Type': 'application/json'});
  37. // res.end(JSON.stringify(result));
  38. // });
  39. // } else {
  40. // res.writeHead(400, {'Content-Type': 'text/plain'});
  41. // res.end('Bad Request');
  42. // }
  43. // } catch (error) {
  44. // res.writeHead(500, {'Content-Type': 'text/plain'});
  45. // res.end('Internal Server Error');
  46. // }
  47. // } else {
  48. // res.writeHead(404, {'Content-Type': 'text/plain'});
  49. // res.end('Not Found');
  50. // }
  51. // });
  52. //
  53. // server.listen(3000, () => {
  54. // console.log('Server is running on port 3000');
  55. // });
  56. const express = require('express');
  57. const app = express();
  58. const bodyParser = require('body-parser');
  59. const {Pool} = require('pg');
  60. const {max} = require("pg/lib/defaults.js");
  61. const pool = new Pool({
  62. user: 'web3',
  63. password: '666',
  64. host: 'dbo.fmode.cn',
  65. port: 5432,
  66. database: 'dev'
  67. });
  68. //解决跨域的问题
  69. app.use((req, res, next) => {
  70. res.setHeader('Access-Control-Allow-Origin', '*'); // 允许所有地址访问
  71. res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
  72. res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  73. res.setHeader('Access-Control-Allow-Credentials', 'true');
  74. next();
  75. });
  76. // 跨域请求
  77. const cors = require('cors');
  78. app.use(cors({
  79. origin: '*'
  80. }));
  81. app.use(bodyParser.json());
  82. let userList = []
  83. var sessionMap = {}
  84. app.get('/user/login', async (req, res) => {
  85. console.log(req.query);
  86. if (!req.query || !req.query.account || !req.query.password) {
  87. res.status(400).send('Invalid request query parameters');
  88. return;
  89. }
  90. const {account, password} = req.query;
  91. try {
  92. const client = await pool.connect();
  93. const result = await client.query('SELECT account,password,gender,skills,birthday,"isFirstRegister",stuno FROM "LjUser" WHERE account = $1 AND password = $2', [account, password]);
  94. console.log(result)
  95. // client.release();
  96. userList = result.rows.map(row => {
  97. return {
  98. user: row.account,
  99. password: row.password,
  100. gender: row.gender,
  101. skills: row.skills,
  102. age: row.age,
  103. isFirstRegister: row.isFirstRegister,
  104. stuno: row.stuno,
  105. };
  106. });
  107. console.log(userList[0].stuno)
  108. if (result.rows.length > 0) {
  109. // 登录成功
  110. console.log(userList[0].stuno)
  111. let isToken = await createToken(userList[0].stuno);
  112. console.log(isToken)
  113. if (isToken) {
  114. res.json(true); // 返回布尔类型的值 true
  115. } else {
  116. res.json(isToken.toString())
  117. }
  118. } else {
  119. // 登录失败
  120. res.json("账号或者密码错误"); // 返回布尔类型的值 false
  121. }
  122. } catch (error) {
  123. console.log('Failed to query the database:', error);
  124. res.status(500).send('Failed to query the database.');
  125. }
  126. });
  127. //注册接口
  128. // app.post('/user/insert', async (req, res) => {
  129. // try {
  130. // const client = await pool.connect();
  131. // const {value1, value2} = req.body; // 从请求体中获取要插入的值
  132. //
  133. // // 执行插入操作
  134. // await client.query('INSERT INTO your_table (column1, column2) VALUES ($1, $2)', [value1, value2]);
  135. // if ()
  136. //
  137. // res.status(200).json({message: 'Insert successful'});
  138. // } catch (error) {
  139. // console.error('Error inserting data:', error);
  140. // res.status(500).json({error: 'An error occurred'});
  141. // }
  142. // })
  143. app.get('/user/register', async (req, res) => {
  144. if (!req.query.account) {
  145. res.json(false)
  146. }
  147. const {account} = req.query;
  148. try {
  149. const client = await pool.connect();
  150. const result = await client.query('SELECT account FROM "LjUser" WHERE account = $1 ;', [account]);
  151. if (result.rows[0] !== undefined) {
  152. res.json(false);
  153. } else {
  154. res.json(true)
  155. }
  156. } catch (error) {
  157. console.log('Failed to query the database:', error);
  158. res.status(500).send('Failed to query the database.');
  159. }
  160. })
  161. app.get('/user/stuno', async (req, res) => {
  162. try {
  163. const client = await pool.connect();
  164. // 执行查询操作获取最大的 stuno
  165. const query = 'SELECT MAX(CAST(stuno AS INT)) as max_stuno FROM "LjUser"';
  166. const result = await client.query(query);
  167. const maxStuno = parseInt(result.rows[0].max_stuno);
  168. console.log(maxStuno)
  169. // 计算新的 stuno
  170. const newStuno = (maxStuno ? maxStuno + 1 : 1).toString().padStart(9, '0');
  171. console.log(newStuno)
  172. // 返回新的 stuno
  173. res.json({stuno: newStuno});
  174. } catch (error) {
  175. console.log('Failed to fetch max stuno from the database:', error);
  176. res.status(500).send('Failed to fetch max stuno from the database.');
  177. }
  178. });
  179. app.put('/user/register', async (req, res) => {
  180. console.log(req.body.stuno);
  181. console.log(req.body.email);
  182. console.log(req.body.objectId);
  183. const {account, email, password, birthday, skills, availableBalance, stuno, objectId} = req.body;
  184. try {
  185. const client = await pool.connect();
  186. // 执行插入操作
  187. const query = 'INSERT INTO "LjUser" (account, email, password, birthday, skills, "availableBalance", stuno, "objectId") VALUES ($1, $2, $3, $4, $5, $6, $7, $8)';
  188. const values = [account, email, password, birthday, skills, availableBalance, stuno, objectId];
  189. await client.query(query, values);
  190. // 返回成功消息
  191. res.json({success: true});
  192. } catch (error) {
  193. console.log('Failed to insert data into the database:', error);
  194. res.status(500).send('Failed to insert data into the database.');
  195. }
  196. });
  197. async function createToken(stuno) {
  198. console.log(stuno)
  199. const client = await pool.connect();
  200. try {
  201. // 处理查询结果
  202. return client.query('SELECT * FROM "LjUserToken" WHERE userno = $1', [stuno]);
  203. } catch (error) {
  204. console.error('数据库查询错误:', error);
  205. return false;
  206. }
  207. console.log(result)
  208. if (result.rows[0].stuno && result.rows[0].token) {
  209. console.log(1)
  210. if (result.rows[0].token - (new Date().getTime() < 0)) {
  211. userList[0].token = btoa(new Date().getTime())
  212. await client.query('UPDATE "LjUserToken" SET userno = $1, token = $2;', [stuno.toString(), userList[0].token])
  213. }
  214. userList[0].token = result.rows[0].token;
  215. return true
  216. } else {
  217. userList[0].token = btoa(new Date().getTime())
  218. console.log(userList[0].token)
  219. try {
  220. console.log(userList[0].token)
  221. await client.query('INSERT INTO "LjUserToken" (userno, token) VALUES ($1, $2);', [stuno, userList[0].token])
  222. } catch (e) {
  223. console.log(e)
  224. }
  225. userList[0].expirationTime = new Date().setTime(new Date().getTime() + 1000 * 100);
  226. sessionMap[userList[0].user] = userList[0];
  227. console.log(userList[0], sessionMap)
  228. return true;
  229. }
  230. }
  231. app.post('/user/login', async (req, res) => {
  232. console.log(req.body)
  233. if (!req.body || !req.body.account || !req.body.password) {
  234. res.status(400).send('Invalid request body');
  235. return;
  236. }
  237. const {account, password} = req.body;
  238. // try {
  239. // const client = await pool.connect();
  240. // const isToken = await client.query('SELECT token FROM "LjUserToken" WHERE userno = $1', [account]);
  241. // if (isToken) {
  242. // const user = await client.query('SELECT account,gender,name,email,skills,isFirstRegister FROM "LjUser" WHERE account = $1', [account]);
  243. // } else {
  244. // let token = createToken();
  245. // }
  246. //
  247. //
  248. // } catch (e) {
  249. //
  250. // }
  251. try {
  252. const client = await pool.connect();
  253. const result = await client.query('SELECT account,gender,name,email,skills,"isFirstRegister" FROM "LjUser" WHERE account = $1 AND password = $2', [account, password]);
  254. console.log(result)
  255. if (result.rows[0] !== undefined) {
  256. console.log(result.rows[0])
  257. res.json(result.rows[0]); // 返回第一行数据
  258. } else {
  259. // 登录失败
  260. res.status(401).send('Invalid account or password');
  261. }
  262. } catch (error) {
  263. console.log('Failed to query the database:', error);
  264. res.status(500).send('Failed to query the database.');
  265. }
  266. });
  267. app.listen(23000, () => {
  268. console.log('Express server is running on port 23000');
  269. });