// call the packages we need var express = require('express'); // call express var app = express(); // define our app using express var bodyParser = require('body-parser'); var request = require("request"); const edurouter = require('./pbl'); const mongo = require('./mongo'); const weixin = require('./weixin'); const cocoflow = require('./cocoflow'); const szdjg = require('./szdjg'); const baoantoken = require('./baoantoken') const morgan = require('morgan'); var path = require("path"); var mongoose = require('mongoose'); var session = require('express-session'); const MongoStore = require('connect-mongo')(session); var port = "7003"; // set our port // const cors = require('cors') app.use(morgan('dev')); // configure app to use bodyParser() // this will let us get the data from a POST app.use(bodyParser.urlencoded({ extended: true, limit: '3mb' })); app.use(bodyParser.json({ limit: '3mb' })); // app.use(cors()); //暂时全跨域 app.use(function (req, res, next) { ///var allowedOrigins = [config.local.origin,'http://cocorobo.hk','http://www.cocorobo.hk','https://cocorobo.hk','http://cloud.cocorobo.hk','https://cloud.cocorobo.hk']; var origin = req.headers.origin || "*"; //if(allowedOrigins.indexOf(origin) > -1){ res.setHeader('Access-Control-Allow-Origin', origin); //} res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header('Access-Control-Allow-Credentials', true); //修改程序信息与版本 res.header('X-Powered-By', ' 3.2.1') //内容类型:如果是post请求必须指定这个属性 res.header('Content-Type', 'application/json;charset=utf-8') next(); }); let local = 'mongodb://root:usestudio-1@172.16.9.240:27017?authSource=admin' // let local = 'mongodb://root:usestudio-1@183.36.26.8:11641/cocorobo?authSource=admin' mongoose.connect(local, { dbName: 'cocorobo', useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: true, autoIndex: false, // Don't build indexes reconnectTries: Number.MAX_VALUE, // Never stop trying to reconnect reconnectInterval: 50000, // Reconnect every 500ms poolSize: 10000, // Maintain up to 10 socket connections // If not connected, return errors immediately rather than waiting for reconnect bufferMaxEntries: 0, connectTimeoutMS: 10000, // Give up initial connection after 10 seconds socketTimeoutMS: 45000, // Close sockets after 45 seconds of inactivity family: 4 // Use IPv4, skip trying IPv6 }) const db = mongoose.connection; // 配置session,使用MongoDB存储session数据 // MongoDB连接字符串,使用与mongo.js中相同的连接方式 // 注意:需要根据实际的MongoDB连接信息调整 app.use(session({ name: "cocorobo", secret: 'cocorobo', resave: true, saveUninitialized: true, cookie: { sameSite: "None", domain: '.cocorobo.cn', httpOnly: false, secure: false, // 根据实际情况调整,如果是HTTPS则设为true maxAge: 24 * 60 * 60000 * 365 }, store: new MongoStore({ mongooseConnection: db, touchAfter: 24 * 3600 }), })); /* app.use(cors({ origin:[`http:${config.local.origin}`,'http://www.cocorobo.hk','https://cocorobo.hk','http://cloud.cocorobo.hk','https://cloud.cocorobo.hk'], methods:['GET','POST','PUT','DELETE'], credentials: true // enable set cookie })); */ // all of our routes will be prefixed with /api app.use('/api/pbl', edurouter); app.use('/api/mongo', mongo); app.use('/api/weixin', weixin); app.use('/api/cocoflow', cocoflow); app.use('/api/szdjg', szdjg); app.use('/api/bat/getToken', async function (req, res, next) { let ticket = req.query.ticket await baoantoken.getToken(ticket, res) }); // app.use('/game', game); app.all('/download', function (req, res, next) { //req.body.url = "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E4%B8%8B%E8%BD%BD%20%284%29.doc"; request({ url: req.body.url, method: "GET", encoding: null, headers: { 'Accept-Encoding': 'gzip, deflate' } }, function (error, response, body) { if (!error && response.statusCode == 200) { res.setHeader('Content-Type', 'application/force-download'); res.setHeader('Content-Disposition', 'attachment; filename=' + path.basename(req.body.url)); res.setHeader('Content-Length', body.length); res.send(body); } }); }); // 捕获未处理的异常 process.on('uncaughtException', (error) => { console.error("未处理的异常:", error); // 这里可以添加更多的错误处理逻辑,比如发送通知或记录日志 }); // 捕获未处理的Promise拒绝 process.on('unhandledRejection', (reason, promise) => { console.error('未处理的Promise拒绝:', promise, '原因:', reason); // 这里可以添加更多的错误处理逻辑,比如发送通知或记录日志 }); // START THE SERVER // ============================================================================= app.listen(port, '0.0.0.0'); console.log('app happens on port ' + port);