123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- // const { MongoClient } = require('mongodb');
- var express = require('express');
- var router = express.Router();
- const querystring = require('querystring');
- var us = {
- mongo: require('mongodb'),
- client: null // 用于存储 MongoClient 实例
- };
- // 初始化 MongoDB 连接
- us.initMongoConnection = async function (host, database) {
- if (!us.client) {
- const url = host; // MongoDB 连接地址
- us.client = new us.mongo.MongoClient(url, {
- useNewUrlParser: true,
- useUnifiedTopology: true,
- maxPoolSize: 10000, // 设置连接池没有上限
- serverSelectionTimeoutMS: 5000, // 服务器选择超时
- socketTimeoutMS: 45000 // 套接字超时
- });
- try {
- await us.client.connect();
- } catch (err) {
- console.error("MongoDB 连接失败", err);
- throw err; // 抛出错误以便调用者处理
- }
- }
- return us.client.db(database); // 返回数据库实例
- }
- /*
- async function updateUserData(host, database, cename, data, res) {
- const db = await us.initMongoConnection(host, database); // 连接数据库
- try {
- const collection = db.collection(cename); // collection设置
- const dateKey = Object.keys(data)[0]; // 获取日期键
- const username = Object.keys(data[dateKey])[0]; // 获取用户ID
- console.log(`更新用户数据:${username}`);
- // 使用 upsert 更新或插入文档
- await collection.updateOne(
- { [dateKey]: { $exists: true } }, // 查询条件, [`${dateKey}.${username}`]: { $exists: true }
- {
- $push: { [`${dateKey}.${username}`]: data[dateKey][username] }, // 将用户数据推入数组
- },
- { upsert: true } // 如果没有数据,默认创建一条数据
- );
- console.log('数据更新成功');
- res.end(JSON.stringify({ status: "1" }))
- } catch (err) {
- res.end(JSON.stringify({ status: "0" }))
- console.error('更新失败', err);
- }
- }
- */
- async function updateUserData(host, database, cename, data, res) {
- const db = await us.initMongoConnection(host, database); // 连接数据库
- try {
- const collection = db.collection(cename); // collection设置
- const dateKey = Object.keys(data)[0]; // 获取日期键
- const userid = Object.keys(data[dateKey])[0];
- const userData = data[dateKey][userid]; // 从 data 中提取 userData
- console.log(userData);
- // 使用 upsert 更新或插入文档
- await collection.updateOne(
- { [dateKey]: { $exists: true } },
- {
- $set: { // 设置其他字段
- [`${dateKey}.${userid}`]: {
- username: userData.username,
- org: userData.org,
- school: userData.school,
- browser: userData.browser
- }
- },
- // 先更新用户信息
- },
- { upsert: true } // 如果没有数据,默认创建一条数据
- );
- // 然后推送操作到 operation 数组
- await collection.updateOne(
- { [dateKey]: { $exists: true } },
- {
- $push: { [`${dateKey}.${userid}.operation`]: userData.operation } // 将用户数据推入数组
- }
- );
- console.log('数据更新成功');
- //res.end(JSON.stringify({ status: "1" }))
- } catch (err) {
- //res.end(JSON.stringify({ status: "0", error: err.message })) // 返回错误信息
- console.error('更新失败', err);
- }
- }
- /*
- {
- "2025-04-01": {
- "userid": {
- username: "",
- org: "",
- school: "",
- browser: "",
- operation:[
- {
- "useTime":"",
- "loadTime":"",
- "object":"",
- "status":"error(报错信息)、正常就是success"
- }
- ]
- }
- }
- // 示例调用
- updateUserData("mongodb://root:usestudio-1@123.58.32.151:11641?authSource=admin", "cocolog", "applog", {
- "2025-04-01": {
- "userid": {
- username: "",
- org: "",
- school: "",
- browser: "",
- operation: [
- {
- "useTime": "",
- "loadTime": "",
- "object": "",
- "status": "error(报错信息)、正常就是success"
- }
- ]
- }
- }
- });
- */
- //查找有无学校
- router.route('/updateUserData').all((req, res, next) => {
- let today = new Date();
- let date = today.getFullYear() + '-' + (today.getMonth() + 1).toString().padStart(2, '0') + '-' + today.getDate().toString().padStart(2, '0');
- let data = req.body[0];
- let decryptedData = {};
- for (let key in data) {
- decryptedData[key] = decodeURIComponent(data[key]);
- }
- updateUserData("mongodb://root:usestudio-1@172.16.9.240:27017?authSource=admin", "cocolog", "applog", {
- [date]: {
- [decryptedData.username]: // 使用变量username作为键
- {
- userid: decryptedData.userid,
- accountNumber: decryptedData.accountNumber,
- date: today,
- appname: decryptedData.appname,
- appid: decryptedData.appid,
- status: decryptedData.status
- }
- }
- }, res);
- });
- queryString = function (url) {
- var a = url.split("?");
- var json = querystring.parse(a[1])
- return json;
- }
- module.exports = router;
|