| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 | // /**//  * 安装pg-promise库,并引入//  * npm init//  * npm i -S pg-promise//  *///// const http = require('http');//// const initOptions = {/* initialization options */};// const pgp = require('pg-promise')(initOptions);// const db = pgp('postgres://web3:666@dbo.fmode.cn:5432/dev');//// async function analysisStudentAgeByGroup(account, password) {//   account = account.toString();//   let sql = `SELECT *//              FROM "LjUser"//              WHERE "account" = $1//                AND "password" = $2;`;////   let result = await db.any(sql, [account, password]);//   return result;// }//// const server = http.createServer(async (req, res) => {//   if (req.url === '/user/login/get') {//     try {//       if (req.method === 'POST') {//         let body = '';//         req.on('data', (chunk) => {//           body += chunk.toString();//         });////         req.on('end', async () => {//           const {account, password} = JSON.parse(body);//           const result = await analysisStudentAgeByGroup(account, password);//           res.writeHead(200, {'Content-Type': 'application/json'});//           res.end(JSON.stringify(result));//         });//       } else {//         res.writeHead(400, {'Content-Type': 'text/plain'});//         res.end('Bad Request');//       }//     } catch (error) {//       res.writeHead(500, {'Content-Type': 'text/plain'});//       res.end('Internal Server Error');//     }//   } else {//     res.writeHead(404, {'Content-Type': 'text/plain'});//     res.end('Not Found');//   }// });//// server.listen(3000, () => {//   console.log('Server is running on port 3000');// });const express = require('express');const app = express();const bodyParser = require('body-parser');const {Pool} = require('pg');const {max} = require("pg/lib/defaults.js");const pool = new Pool({  user: 'web3',  password: '666',  host: 'dbo.fmode.cn',  port: 5432,  database: 'dev'});//解决跨域的问题app.use((req, res, next) => {  res.setHeader('Access-Control-Allow-Origin', '*'); // 允许所有地址访问  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');  res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');  res.setHeader('Access-Control-Allow-Credentials', 'true');  next();});// 跨域请求const cors = require('cors');app.use(cors({  origin: '*'}));app.use(bodyParser.json());let userList = []var sessionMap = {}app.get('/user/login', async (req, res) => {  console.log(req.query);  if (!req.query || !req.query.account || !req.query.password) {    res.status(400).send('Invalid request query parameters');    return;  }  const {account, password} = req.query;  try {    const client = await pool.connect();    const result = await client.query('SELECT account,password,gender,skills,birthday,"isFirstRegister",stuno FROM "LjUser" WHERE account = $1 AND password = $2', [account, password]);    console.log(result)    // client.release();    userList = result.rows.map(row => {      return {        user: row.account,        password: row.password,        gender: row.gender,        skills: row.skills,        age: row.age,        isFirstRegister: row.isFirstRegister,        stuno: row.stuno,      };    });    console.log(userList[0].stuno)    if (result.rows.length > 0) {      // 登录成功      console.log(userList[0].stuno)      let isToken = await createToken(userList[0].stuno);      console.log(isToken)      if (isToken) {        res.json(true); // 返回布尔类型的值 true      } else {        res.json(isToken.toString())      }    } else {      // 登录失败      res.json("账号或者密码错误"); // 返回布尔类型的值 false    }  } catch (error) {    console.log('Failed to query the database:', error);    res.status(500).send('Failed to query the database.');  }});//注册接口// app.post('/user/insert', async (req, res) => {//   try {//     const client = await pool.connect();//     const {value1, value2} = req.body; // 从请求体中获取要插入的值////     // 执行插入操作//     await client.query('INSERT INTO your_table (column1, column2) VALUES ($1, $2)', [value1, value2]);//     if ()////       res.status(200).json({message: 'Insert successful'});//   } catch (error) {//     console.error('Error inserting data:', error);//     res.status(500).json({error: 'An error occurred'});//   }// })app.get('/user/register', async (req, res) => {  if (!req.query.account) {    res.json(false)  }  const {account} = req.query;  try {    const client = await pool.connect();    const result = await client.query('SELECT account FROM "LjUser" WHERE account = $1 ;', [account]);    if (result.rows[0] !== undefined) {      res.json(false);    } else {      res.json(true)    }  } catch (error) {    console.log('Failed to query the database:', error);    res.status(500).send('Failed to query the database.');  }})app.get('/user/stuno', async (req, res) => {  try {    const client = await pool.connect();    // 执行查询操作获取最大的 stuno    const query = 'SELECT MAX(CAST(stuno AS INT)) as max_stuno FROM "LjUser"';    const result = await client.query(query);    const maxStuno = parseInt(result.rows[0].max_stuno);    console.log(maxStuno)    // 计算新的 stuno    const newStuno = (maxStuno ? maxStuno + 1 : 1).toString().padStart(9, '0');    console.log(newStuno)    // 返回新的 stuno    res.json({stuno: newStuno});  } catch (error) {    console.log('Failed to fetch max stuno from the database:', error);    res.status(500).send('Failed to fetch max stuno from the database.');  }});app.put('/user/register', async (req, res) => {  console.log(req.body.stuno);  console.log(req.body.email);  console.log(req.body.objectId);  const {account, email, password, birthday, skills, availableBalance, stuno, objectId} = req.body;  try {    const client = await pool.connect();    // 执行插入操作    const query = 'INSERT INTO "LjUser" (account, email, password, birthday, skills, "availableBalance", stuno, "objectId") VALUES ($1, $2, $3, $4, $5, $6, $7, $8)';    const values = [account, email, password, birthday, skills, availableBalance, stuno, objectId];    await client.query(query, values);    // 返回成功消息    res.json({success: true});  } catch (error) {    console.log('Failed to insert data into the database:', error);    res.status(500).send('Failed to insert data into the database.');  }});async function createToken(stuno) {  console.log(stuno)  const client = await pool.connect();  try {    // 处理查询结果    return client.query('SELECT * FROM "LjUserToken" WHERE userno = $1', [stuno]);  } catch (error) {    console.error('数据库查询错误:', error);    return false;  }  console.log(result)  if (result.rows[0].stuno && result.rows[0].token) {    console.log(1)    if (result.rows[0].token - (new Date().getTime() < 0)) {      userList[0].token = btoa(new Date().getTime())      await client.query('UPDATE "LjUserToken" SET userno = $1, token = $2;', [stuno.toString(), userList[0].token])    }    userList[0].token = result.rows[0].token;    return true  } else {    userList[0].token = btoa(new Date().getTime())    console.log(userList[0].token)    try {      console.log(userList[0].token)      await client.query('INSERT INTO "LjUserToken" (userno, token) VALUES ($1, $2);', [stuno, userList[0].token])    } catch (e) {      console.log(e)    }    userList[0].expirationTime = new Date().setTime(new Date().getTime() + 1000 * 100);    sessionMap[userList[0].user] = userList[0];    console.log(userList[0], sessionMap)    return true;  }}app.post('/user/login', async (req, res) => {  console.log(req.body)  if (!req.body || !req.body.account || !req.body.password) {    res.status(400).send('Invalid request body');    return;  }  const {account, password} = req.body;  // try {  //   const client = await pool.connect();  //   const isToken = await client.query('SELECT token FROM "LjUserToken" WHERE userno = $1', [account]);  //   if (isToken) {  //     const user = await client.query('SELECT account,gender,name,email,skills,isFirstRegister FROM "LjUser" WHERE account = $1', [account]);  //   } else {  //     let token = createToken();  //   }  //  //  // } catch (e) {  //  // }  try {    const client = await pool.connect();    const result = await client.query('SELECT account,gender,name,email,skills,"isFirstRegister" FROM "LjUser" WHERE account = $1 AND password = $2', [account, password]);    console.log(result)    if (result.rows[0] !== undefined) {      console.log(result.rows[0])      res.json(result.rows[0]); // 返回第一行数据    } else {      // 登录失败      res.status(401).send('Invalid account or password');    }  } catch (error) {    console.log('Failed to query the database:', error);    res.status(500).send('Failed to query the database.');  }});app.listen(23000, () => {  console.log('Express server is running on port 23000');});
 |