var mysql = require('mysql'); var express = require('express'); var app = express(); var bodyParser = require('body-parser'); const crypto = require('crypto'); const fs = require('fs'); const path = require('path'); const fileUpload = require('express-fileupload'); const session = require('express-session'); const multer = require('multer'); var connection = mysql.createConnection({ host : 'localhost', port : '13307', user : 'root', password : '123456', database : 'mailbox' }); // 创建 application/x-www-form-urlencoded 编码解析 var urlencodedParser = bodyParser.urlencoded({ extended: false }) app.use(express.static('static')); app.get('/', function (req, res) { //var result_string = build_html_head('识别系统') + '

欢迎来到识别系统!

\r\n'; var result_string = build_html_head('识别系统') + '

欢迎来到识别系统!

\r\n'; result_string +='\r\n'; result_string +='\r\n'; connection.query('SELECT * FROM mail;', function (error, results, fields) { if (error) { console.log('[SELECT ERROR] - ',error.message); return; } console.log('[SELECT SUCCESS]'); for (var i = results.length - 1; i >= 0; i--) { result_string +='\r\n'; result_string += ('\r\n'); result_string +='\r\n'; } result_string +='
用户名密码身份邮箱
' + results[i].name + '' + results[i].passwd + '' + results[i].id + '' + results[i].msg + '
\r\n'; result_string +='注册账户\r\n' result_string +='
\r\n'; result_string +='前往登陆\r\n'; result_string +='
\r\n'; res.send(result_string + build_html_foot()) }); }) app.use(session({ // 这里是在Express应用程序中使用会话中间件,并传入一个包含会话配置选项的对象。 secret: 'your_secret_key', // 指定会话的密钥,用于加密会话数据,确保会话数据的安全性。 resave: false, // 在会话数据没有发生变化的情况下,是否强制重新保存会话数据。这里设置为false,表示不强制重新保存。 saveUninitialized: true, // 是否在会话初始化时保存未修改过的会话。设置为true,表示保存未修改过的会话。 cookie: { // 配置会话的cookie参数, maxAge: 60000 // 指定了会话的过期时间,单位是毫秒。在这里,会话会在60秒(即60000毫秒)后过期。 } })); app.get('/user-info', function(req, res) { if (req.session.user) { res.json(req.session.user); } else { res.status(401).json({ message: '未登录' }); } }); app.post('/login', urlencodedParser, function(req, res) {//用户登录功能 var username = req.body.username; var password = req.body.passwd; // 查询数据库中是否存在匹配的用户名和密码 connection.query('SELECT * FROM mail WHERE name = ? AND passwd = ?', [username, password], function(error, results, fields) { if (error) { console.log('[SELECT ERROR] - ', error.message); res.send('数据库查询错误!'); // 可以重定向到登录页面或其他处理方式 return; } if (results.length > 0) { // 登录成功 req.session.user = { id: results[0].id, username: username }; res.redirect('/work1.html'); } else {// 登录失败,可以重定向到登录页面并显示错误信息 console.log('[用户名或密码不正确]'); res.send(''); } }); }) app.get('/logout', function(req, res) {//用户退出登录功能 req.session.user = null res.redirect('/welcome.html'); }) app.post('/idcheck', urlencodedParser, function(req, res) {//处理一个POST请求,路径为/idcheck,并传入一个中间件urlencodedParser用于解析POST请求中的表单数据。回调函数包含了请求对象req和响应对象res。 var username = req.body.username; connection.query('SELECT id FROM mail WHERE name = ?', [username], function(error, results, fields) {//查询结果通过回调函数传递给results if (error) { console.log('[SELECT ERROR] - ', error.message); res.send('数据库查询错误!'); return; } if (results.length > 0 && results[0].id === 'admin') {//在查询结果中,如果存在匹配的用户且该用户的ID为admin,则返回一个包含用户ID为admin的响应对象。 res.send({ userid: 'admin' });//响应对象res返回一个包含用户ID为admin的JSON对象。 } else {//如果查询结果为空或者查询到的用户ID不是admin,则返回一个空的用户ID。 res.send({ userid: '' }); } }); }); app.post('/insertrecord', urlencodedParser, function (req, res) {//注册用户功能 var insert_sql = 'INSERT INTO mail(name, passwd, id, msg) VALUES(?,?,?,?)'; var insert_params = [req.body.name, req.body.passwd, req.body.id, req.body.msg]; connection.query(insert_sql, insert_params, function(error, result) { if (error) { console.log('[INSERT ERROR] - ',error.message); return; } console.log('[INSERT SUCCESS]'); }); res.redirect('/'); }) app.get('/api/users', function (req, res) { // 查询所有用户 connection.query('SELECT * FROM mail', function (error, users) { if (error) { console.log('[SELECT ERROR] - ', error.message); res.status(500).send('数据库查询错误!'); return; } // 遍历所有用户,查询每个用户的图片上传次数 let completedRequests = 0; users.forEach(user => { connection.query('SELECT COUNT(*) AS imageCount FROM images WHERE username = ?', [user.name], function (error, results) { if (error) { console.log('[SELECT ERROR] - ', error.message); res.status(500).send('数据库查询错误!'); return; } // 将查询结果添加到用户对象中 user.imageCount = results[0].imageCount; // 检查是否所有查询都已完成 completedRequests++; if (completedRequests === users.length) { res.json(users); } }); }); }); }); app.get('/api/user-images-count', function (req, res) { const username = req.query.username; if (!username) { res.status(400).json({ error: '用户名不能为空' }); return; } connection.query('SELECT COUNT(*) AS imageCount FROM images WHERE username = ?', [username], function (error, results) { if (error) { console.log('[SELECT ERROR] - ', error.message); res.status(500).send('数据库查询错误!'); return; } res.json({ imageCount: results[0].imageCount }); }); }); app.get('/api/userUploads', function (req, res) { const sql = 'SELECT username, COUNT(*) AS upload_count FROM images GROUP BY username'; connection.query(sql, function (error, results) { if (error) { console.log('[SELECT ERROR] - ', error.message); res.status(500).send('数据库查询错误!'); return; } res.json(results); }); }); app.post('/api/updateUser', urlencodedParser, function (req, res) { const { name, passwd, id, msg, oldName } = req.body; const sql = 'UPDATE mail SET name = ?, passwd = ?, id = ?, msg = ? WHERE name = ?'; connection.query(sql, [name, passwd, id, msg, oldName], function (error, result) { if (error) { console.log('[UPDATE ERROR] - ', error.message); res.status(500).send('更新用户信息失败!'); return; } res.json({ message: '用户信息更新成功' }); }); }); app.post('/api/deleteUser', urlencodedParser, function (req, res) { const { name } = req.body; const sql = 'DELETE FROM mail WHERE name = ?'; connection.query(sql, [name], function (error, result) { if (error) { console.log('[DELETE ERROR] - ', error.message); res.status(500).send('删除用户失败!'); return; } res.json({ message: '用户删除成功' }); }); }); function build_html_head(title) {//页面头创建 var html_fragment = '\r\n'; html_fragment += '\r\n'; html_fragment += '\r\n'; html_fragment += ' \r\n'; html_fragment += ' ' + title +'\r\n'; html_fragment += ' \r\n'; html_fragment += '\r\n'; html_fragment += '\r\n'; return html_fragment; } function build_html_foot() {//no'de页面尾部 return '\r\n'; } var server = app.listen(8083, '0.0.0.0', function () { var host = server.address().address var port = server.address().port connection.connect(function(err){ if(err){ console.log('[query] - :'+err); return; } console.log('[connection connect] succeed!'); }); console.log("应用实例,访问地址为 http://%s:%s", host, port) })